Lese Excel-filer fra C #

stemmer
233

Er det fri eller åpen kildekode bibliotek for å lese Excel-filer (xls) direkte fra en C # program?

Det trenger ikke å være for fancy, bare å velge et regneark og lese data som strenger. Så langt jeg har brukt Eksporter til Unicode tekst funksjon av Excel, og analyse av resultatfilen (tabulatordelt), men jeg ønsker å eliminere manuelle trinn.

Publisert på 19/08/2008 klokken 05:23
kilden bruker
På andre språk...                            


32 svar

stemmer
1

du kunne skrive et Excel-regneark som laster en gitt excel regneark og lagrer det som csv (snarere enn å gjøre det manuelt).

så du kan automatisere det fra C #.

og når sin i csv, kan C # program Grok det.

(Også, hvis noen ber deg om å programmere i excel, er det best å late som du ikke vet hvordan)

(Edit: ah ja, rane og Ryan er både høyre)

Svarte 19/08/2008 kl. 05:26
kilden bruker

stemmer
1

Jeg vet at folk har vært å lage et Excel "forlengelse" for dette formålet.
Du mer eller mindre gjør en knapp i Excel som sier "Eksporter til Program X", og deretter eksportere og sende ut data i et format som programmet kan lese.

http://msdn.microsoft.com/en-us/library/ms186213.aspx skal være et godt sted å begynne.

Lykke til

Svarte 19/08/2008 kl. 05:26
kilden bruker

stemmer
3

Tilgi meg hvis jeg er off-base her, men er ikke dette hva kontoret PIA er for?

Svarte 19/08/2008 kl. 05:28
kilden bruker

stemmer
83

Hvis det er bare enkle data i Excel-filen kan du lese dataene via ADO.NET. Se tilkoblings strengene er oppført her:

http://www.connectionstrings.com/?carrier=excel2007 eller http://www.connectionstrings.com/?carrier=excel

-Ryan

Oppdatering: så kan du bare lese regnearket via noe sånt select * from [Sheet1$]

Svarte 19/08/2008 kl. 05:28
kilden bruker

stemmer
4

Ikke gratis, men med siste versjon av Office er det en veldig hyggelig automatisering .Net API. (det har vært en API for en lang stund, men var ekkel COM) Du kan gjøre alt du ønsker / trenger i kode alt mens Office app forblir en skjult bakgrunnsprosess.

Svarte 19/08/2008 kl. 05:31
kilden bruker

stemmer
1

Bare gjorde en rask demo prosjekt som krevde administrerende noen Excel-filer. .NET komponent fra GemBox programvare var tilstrekkelig for mine behov. Den har en gratis versjon med noen begrensninger.

http://www.gemboxsoftware.com/GBSpreadsheet.htm

Svarte 19/08/2008 kl. 05:48
kilden bruker

stemmer
16

Her er noen kode jeg skrev i C # med .NET 1.1 for noen år siden. Ikke sikker på om dette ville være akkurat det du trenger (og kan ikke være min beste kode :)).

using System;
using System.Data;
using System.Data.OleDb;

namespace ExportExcelToAccess
{
    /// <summary>
    /// Summary description for ExcelHelper.
    /// </summary>
    public sealed class ExcelHelper
    {
        private const string CONNECTION_STRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=<FILENAME>;Extended Properties=\"Excel 8.0;HDR=Yes;\";";

        public static DataTable GetDataTableFromExcelFile(string fullFileName, ref string sheetName)
        {
            OleDbConnection objConnection = new OleDbConnection();
            objConnection = new OleDbConnection(CONNECTION_STRING.Replace("<FILENAME>", fullFileName));
            DataSet dsImport = new DataSet();

            try
            {
                objConnection.Open();

                DataTable dtSchema = objConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

                if( (null == dtSchema) || ( dtSchema.Rows.Count <= 0 ) )
                {
                    //raise exception if needed
                }

                if( (null != sheetName) && (0 != sheetName.Length))
                {
                    if( !CheckIfSheetNameExists(sheetName, dtSchema) )
                    {
                        //raise exception if needed
                    }
                }
                else
                {
                    //Reading the first sheet name from the Excel file.
                    sheetName = dtSchema.Rows[0]["TABLE_NAME"].ToString();
                }

                new OleDbDataAdapter("SELECT * FROM [" + sheetName + "]", objConnection ).Fill(dsImport);
            }
            catch (Exception)
            {
                //raise exception if needed
            }
            finally
            {
                // Clean up.
                if(objConnection != null)
                {
                    objConnection.Close();
                    objConnection.Dispose();
                }
            }


            return dsImport.Tables[0];
            #region Commented code for importing data from CSV file.
            //              string strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source=" + System.IO.Path.GetDirectoryName(fullFileName) +";" +"Extended Properties=\"Text;HDR=YES;FMT=Delimited\"";
            //
            //              System.Data.OleDb.OleDbConnection conText = new System.Data.OleDb.OleDbConnection(strConnectionString);
            //              new System.Data.OleDb.OleDbDataAdapter("SELECT * FROM " + System.IO.Path.GetFileName(fullFileName).Replace(".", "#"), conText).Fill(dsImport);
            //              return dsImport.Tables[0];

            #endregion
        }

        /// <summary>
        /// This method checks if the user entered sheetName exists in the Schema Table
        /// </summary>
        /// <param name="sheetName">Sheet name to be verified</param>
        /// <param name="dtSchema">schema table </param>
        private static bool CheckIfSheetNameExists(string sheetName, DataTable dtSchema)
        {
            foreach(DataRow dataRow in dtSchema.Rows)
            {
                if( sheetName == dataRow["TABLE_NAME"].ToString() )
                {
                    return true;
                }   
            }
            return false;
        }
    }
}
Svarte 19/08/2008 kl. 08:50
kilden bruker

stemmer
153

var fileName = string.Format("{0}\\fileNameHere", Directory.GetCurrentDirectory());
var connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", fileName);

var adapter = new OleDbDataAdapter("SELECT * FROM [workSheetNameHere$]", connectionString);
var ds = new DataSet();

adapter.Fill(ds, "anyNameHere");

DataTable data = ds.Tables["anyNameHere"];

Dette er hva jeg vanligvis bruker. Det er litt annerledes fordi jeg pleier å stikke en AsEnumerable () ved redigering av tabeller:

var data = ds.Tables["anyNameHere"].AsEnumerable();

da dette lar meg bruke LINQ til å søke og bygge structs fra feltene.

var query = data.Where(x => x.Field<string>("phoneNumber") != string.Empty).Select(x =>
                new MyContact
                    {
                        firstName= x.Field<string>("First Name"),
                        lastName = x.Field<string>("Last Name"),
                        phoneNumber =x.Field<string>("Phone Number"),
                    });
Svarte 19/08/2008 kl. 10:18
kilden bruker

stemmer
27

Den ADO.NET tilnærmingen er raskt og enkelt, men det har noen quirks som du bør være klar over, spesielt når det gjelder hvordan datatyper håndteres.

Denne utmerkede artikkelen vil hjelpe deg å unngå noen vanlige fallgruvene: http://blog.lab49.com/archives/196

Svarte 20/08/2008 kl. 11:19
kilden bruker

stemmer
8

Jeg gjorde mye lesing fra Excel-filer i C # en stund siden, og vi har brukt to tilnærminger:

  • COM API, hvor du tilgang til Excel objekter direkte og manipulere dem gjennom metoder og egenskaper
  • ODBC driver som gjør det mulig å bruke Excel som en database.

Sistnevnte tilnærming var mye raskere: lese et stort bord med 20 kolonner og 200 linjer ville ta 30 sekunder via COM, og et halvt sekund via ODBC. Så jeg vil anbefale databasen tilnærming hvis alt du trenger er dataene.

Jubel,

Carl

Svarte 20/08/2008 kl. 11:24
kilden bruker

stemmer
12

Mens du spesifikt be for .xls, noe som tyder på de eldre filformater, for OpenXML formater (f.eks xlsx) Jeg anbefaler OpenXML SDK ( http://msdn.microsoft.com/en-us/library/bb448854.aspx )

Svarte 04/09/2008 kl. 04:00
kilden bruker

stemmer
2

Jeg anbefaler FileHelpers biblioteket som er en gratis og enkel å bruke NET biblioteket for å importere / eksportere data fra Excel, fast lengde eller avgrenset poster i filer, strenger eller bekker + More.

Excel Data Link dokumentasjon Seksjon http://filehelpers.sourceforge.net/example_exceldatalink.html

Svarte 04/09/2008 kl. 08:24
kilden bruker

stemmer
3

I det siste, blant annet for å bli bedre på LINQ .... Jeg har brukt Excel automatisering API for å lagre filen som XML-regneark, og deretter få prosessen som filen ved bruk LINQ til XML.

Svarte 04/09/2008 kl. 09:10
kilden bruker

stemmer
22

Dette er hva jeg brukte for Excel 2003:

Dictionary<string, string> props = new Dictionary<string, string>();
props["Provider"] = "Microsoft.Jet.OLEDB.4.0";
props["Data Source"] = repFile;
props["Extended Properties"] = "Excel 8.0";

StringBuilder sb = new StringBuilder();
foreach (KeyValuePair<string, string> prop in props)
{
    sb.Append(prop.Key);
    sb.Append('=');
    sb.Append(prop.Value);
    sb.Append(';');
}
string properties = sb.ToString();

using (OleDbConnection conn = new OleDbConnection(properties))
{
    conn.Open();
    DataSet ds = new DataSet();
    string columns = String.Join(",", columnNames.ToArray());
    using (OleDbDataAdapter da = new OleDbDataAdapter(
        "SELECT " + columns + " FROM [" + worksheet + "$]", conn))
    {
        DataTable dt = new DataTable(tableName);
        da.Fill(dt);
        ds.Tables.Add(dt);
    }
}
Svarte 04/09/2008 kl. 09:39
kilden bruker

stemmer
15

Koogra er en åpen kildekode-komponent skrevet i C # som leser og skriver Excel-filer.

Svarte 04/11/2008 kl. 09:22
kilden bruker

stemmer
3

SpreadsheetGear for NET er et Excel-kompatibel regneark komponent for .NET. Du kan se hva våre kunder sier om ytelse på høyre side av vår produktside . Du kan prøve det selv med gratis, fullt funksjonell evaluering .

Svarte 19/01/2009 kl. 13:49
kilden bruker

stemmer
6

ExcelMapper er en åpen kildekode verktøy ( http://code.google.com/p/excelmapper/ ) som kan brukes til å lese Excel-regneark som sterkt skrevet Objects. Den støtter både xls og XLSX formater.

Svarte 11/05/2009 kl. 13:26
kilden bruker

stemmer
0

Jeg bare brukt ExcelLibrary å laste en XLS regneark i et datasett. Fungerte bra for meg.

Svarte 24/08/2009 kl. 04:21
kilden bruker

stemmer
3

SmartXLS er en annen excel regneark komponent som støtter de fleste funksjonene i Excel-diagrammer, formler motorer, og kan lese / skrive excel2007 OpenXML-formatet.

Svarte 30/09/2009 kl. 01:18
kilden bruker

stemmer
1

Excel-pakke er en åpen kildekode (GPL) komponent for å lese / skrive Excel 2007-filer. Jeg brukte den på et lite prosjekt, og API er grei. Fungerer med XLSX bare (Excel 200 &), ikke med XLS.

Kildekoden virker også godt organisert og lett å komme seg rundt (Hvis du trenger å utvide funksjonaliteten eller fikse mindre problemer som jeg gjorde).

Ved første prøvde ADO.Net (Excel forbindelse streng) tilnærming, men det var fylt med ekkel hacks - for eksempel hvis andre rad inneholder et nummer, vil den returnere ints for alle felter i kolonnen under lavt og slippe alle data som ikke passer.

Svarte 01/10/2009 kl. 01:44
kilden bruker

stemmer
2

Du kan prøve å bruke denne åpen kildekode-løsning som gjør at du arbeider med Excel mye mer renere.

http://excelwrapperdotnet.codeplex.com/

Svarte 08/03/2010 kl. 22:16
kilden bruker

stemmer
2

SpreadsheetGear er kjempebra. Ja det er en utgift, men sammenlignet med tvinne med disse andre løsninger, er det verdt prisen. Den er rask, pålitelig, veldig omfattende, og jeg må si etter å ha brukt dette produktet i min fulltids programvare jobb i over et og et halvt år, deres kundeservice er fantastisk!

Svarte 26/08/2010 kl. 16:01
kilden bruker

stemmer
21

Hva med Excel data Reader?

http://exceldatareader.codeplex.com/

Jeg har brukt i det sinne, i et produksjonsmiljø, for å trekke store mengder data fra en rekke Excel-filer til SQL Server Compact. Det fungerer veldig bra, og det er ganske robust.

Svarte 08/09/2010 kl. 06:45
kilden bruker

stemmer
0

Excel data Reader er veien å gå!

It'si Open Source, ved http://exceldatareader.codeplex.com/ og aktivt utviklet.

Vi har brukt det for å lese tabell (og noen ganger ikke så tabell) regneark for et par år nå (i en økonomisk program).

Fungerer som en sjarm å lese enhetstestdata fra lesbar ark.

Bare unngå trekk for å prøve å komme tilbake Datetime-tallet, som for Excel, Datetime-er er bare doble tall.

Svarte 04/02/2011 kl. 17:41
kilden bruker

stemmer
3

.NET-komponenten Excel Reader NET kan tilfredsstille dine behov. Det er god nok for lesing XLSX og XLS-filer. Så prøv det fra:

http://www.devtriogroup.com/ExcelReader

Svarte 12/04/2011 kl. 05:30
kilden bruker

stemmer
2

Løsningen som vi brukte, for å:

  • Tillat lesing / skriving av Excel produsert filer
  • Vær rask i ytelse (ikke liker å bruke COM)
  • Vær MS Office Independent (nødvendig for å kunne brukes uten kunder som har MS Office installert)
  • Være gratis eller Open Source (men aktivt utviklet)

Det er flere valg, men vi fant NPoi (.NET port av Java lange eksisterende Poi åpen kildekode) for å være den beste: http://npoi.codeplex.com/

Den gjør det også arbeider med .doc og PPT filformater

Svarte 21/04/2011 kl. 08:07
kilden bruker

stemmer
0

Hvis du har flere bord i samme regneark du kan gi hvert bord et objekt navn og lese tabellen ved hjelp av OLEDB metoden som vist her: http://vbktech.wordpress.com/2011/05/10/c-net-reading -og-skriving-til-flere-bord-in-the-samme-microsoft-excel-regneark /

Svarte 20/07/2011 kl. 00:33
kilden bruker

stemmer
2

Hvis det er bare tabelldata. Jeg vil anbefale fil data hjelpere av Marcos Melli som kan lastes ned her .

Svarte 13/09/2011 kl. 02:47
kilden bruker

stemmer
1

Take.ioRegneark vil gjøre dette arbeidet for deg, og uten kostnad. Bare ta en titt på dette .

Svarte 15/09/2011 kl. 01:33
kilden bruker

stemmer
6

Jeg ønsker å vise en enkel metode for å lese xls / xlsx fil med .NET. Jeg håper at det følgende vil være nyttig for deg.

 privat Table ReadExcelToTable (string bane)    
 {

     // Connection String

     string connstring = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source =" + bane + "; Utvidet Properties = 'Excel 8.0, HDR = NO; IMEX = 1';";  
     // samme navn 
     // string connstring = Provider = Microsoft.Jet.OLEDB.4.0; Data Source =" + bane + // "; Utvidet Properties = 'Excel 8.0, HDR = NO; IMEX = 1';"; 

     ved anvendelse av (OleDbConnection conn = new OleDbConnection (connstring))
     {
        conn.Open ();
        // Få alle ark navn
        Table sheetsName = conn.GetOleDbSchemaTable (OleDbSchemaGuid.Tables, nytt objekt [] {null, null, null, "Tabell"});  

        // Få det første arket navn
        string firstSheetName = sheetsName.Rows [0] [2] .ToString (); 

        // Query String 
        string SQL = string.Format ( "SELECT * FROM [{0}]", firstSheetName); 
        OleDbDataAdapter ada = new OleDbDataAdapter (SQL, connstring);
        Datasett set = nytt datasett ();
        ada.Fill (set);
        returnere set.Tables [0];   
   }
 }

Koden er fra artikkelen: http://www.c-sharpcorner.com/uploadfile/d2dcfc/read-excel-file-with-net/ . Du kan få mer informasjon fra den.

Svarte 06/03/2012 kl. 05:49
kilden bruker

stemmer
1

Vi bruker ClosedXML i ganske store systemer.

  • Gratis
  • Lett å installere
  • Rett frem koding
  • Veldig responsiv støtte
  • Utvikler teamet er ekstremt åpen for nye forslag. Ofte nye funksjoner og feilrettinger er implementert i den samme uken
Svarte 17/08/2012 kl. 06:34
kilden bruker

stemmer
2

Sent til festen, men jeg er en fan av LinqToExcel

Svarte 26/10/2012 kl. 13:09
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more