Vra

Is daar 'n gratis of open source biblioteek om Excel-lêers direk te lees (XLS) van 'n C # program?

Dit hoef nie te fancy te wees, net om 'n werkblad te kies en lees die data as snare. Tot dusver het ek al met behulp van Uitvoer na Unicode teks funksie van Excel, en die ontleding van die lêer (tabgescheiden), maar ek wil graag die handleiding stap uit te skakel.

Was dit nuttig?

Oplossing

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"];

Dit is wat ek gewoonlik gebruik. Dit is 'n bietjie anders, want ek gewoonlik 'n AsEnumerable () vashou aan die wysig van die tafels:

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

as dit laat my gebruik LINQ te soek en structs bou van die velde.

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"),
                    });

Ander wenke

As dit is net eenvoudig data vervat in die Excel lêer wat jy kan die data lees via ADO.NET. Sien die verband snare hier gelys:

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

-Ryan

Update: dan kan jy net lees die werkblad via iets soos select * from [Sheet1$]

Die ADO.NET benadering is vinnig en maklik, maar dit het 'n paar eienaardighede wat jy moet bewus wees van, veral met betrekking tot hoe data tipes hanteer.

Hierdie uitstekende artikel sal jou help om te verhoed dat 'n paar algemene slaggate: http://blog.lab49.com/archives/196

Dit is wat ek gebruik vir 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);
    }
}

Hoe gaan dit met Excel Data Reader?

http://exceldatareader.codeplex.com/

Ek het in dit woede, in 'n produksie-omgewing, om groot hoeveelhede data te trek uit 'n verskeidenheid van Excel lêers in SQL Server Compact. Dit werk baie goed en dit is eerder sterk.

Hier is 'n paar kode wat ek geskryf het in C # gebruik van NET 1.1 'n paar jaar gelede. Nie seker of dit sal wees presies wat jy nodig het (en kan nie my beste-kode wees:).)

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;
        }
    }
}

Koogra is 'n oop-bron komponent geskryf in C # wat lees en skryf Excel-lêers.

Terwyl jy het spesifiek vra vir xls, impliseer die ouer lêerformate, vir die OpenXML formate (bv xlsx) Ek raai die OpenXML SDK ( http://msdn.microsoft.com/en-us/library/bb448854.aspx )

Ek het 'n baie lees van Excel lêers in C # 'n ruk gelede, en ons gebruik twee benaderings:

  • Die COM API, waar jy direkte toegang tot Excel se oogmerke en manipuleer hulle deur metodes en eienskappe
  • Die ODBC bestuurder wat jou toelaat om Excel te gebruik soos 'n databasis.

Die laasgenoemde benadering is veel vinniger: lees 'n groot tafel met 20 kolomme en 200 lyne sal 30 sekondes neem via COM en 'n halwe sekonde via ODBC. So sou ek die databasis benadering aanbeveel as alles wat jy nodig het, is die data.

Cheers,

Carl

ExcelMapper is 'n oop bron hulpmiddel ( http://code.google.com/p/excelmapper/ ) wat gebruik kan word om Excel werkkaarte so sterk Getikte voorwerpe lees. Dit word ondersteun deur beide xls en xlsx formaat.

Ek wil 'n eenvoudige metode om xls / xlsx lêer lees met NET wys. Ek hoop dat die volgende nuttig vir jou sal wees.

 private DataTable ReadExcelToTable(string path)    
 {

     //Connection String

     string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';";  
     //the same name 
     //string connstring = Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + path + //";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; 

     using(OleDbConnection conn = new OleDbConnection(connstring))
     {
        conn.Open();
        //Get All Sheets Name
        DataTable sheetsName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,new object[]{null,null,null,"Table"});  

        //Get the First Sheet Name
        string firstSheetName = sheetsName.Rows[0][2].ToString(); 

        //Query String 
        string sql = string.Format("SELECT * FROM [{0}]",firstSheetName); 
        OleDbDataAdapter ada =new OleDbDataAdapter(sql,connstring);
        DataSet set = new DataSet();
        ada.Fill(set);
        return set.Tables[0];   
   }
 }

Kode is van artikel: http: / /www.c-sharpcorner.com/uploadfile/d2dcfc/read-excel-file-with-net/ . Jy kan meer besonderhede kry van dit.

Nie gratis, maar met die nuutste Office is daar 'n baie nice outomatisering Net API. (Daar 'n API vir 'n lang tyd was, maar was nare COM) Jy kan alles wat jy wil / moet in kode doen so lank as die Kantoor app bly 'n verborge agtergrond proses.

Vergewe my as ek off-base hier, maar is dit nie wat die Office PIA se is vir?

Die afgelope tyd, deels om beter te kry by LINQ .... Ek het al met behulp van Excel se outomatisering API om die lêer as XML Spreadsheet red en dan kry proses wat die gebruik van LINQ na XML-lêer.

SpreadsheetGear vir NET is 'n Excel-compatible spreadsheet komponent vir NET. Jy kan sien wat ons kliënte sê oor prestasie op die regterkant van die produk bladsy . Jy kan dit self probeer met die vrye, ten volle funksionele evaluering .

SmartXLS is nog 'n excel spreadsheet komponent wat die meeste kenmerke van Excel Charts, formules enjins ondersteun, en kan lees / skryf die excel2007 openxml formaat.

Die NET komponent Excel Reader NET kan jou vereiste te voldoen. Dit is 'n goeie enought vir lees XLSX en XLS lêers. So probeer dit uit:

  

http://www.devtriogroup.com/ExcelReader

Ek beveel die FileHelpers Biblioteek wat 'n gratis en maklik om te gebruik NET biblioteek na / uitvoer data uit Excel, vaste lengte of afgebaken rekords in lêers, stringe of strome in te voer + Meer.

Die Excel Data Link Dokumentasie Afdeling http://filehelpers.sourceforge.net/example_exceldatalink.html

Jy kan probeer om met behulp van hierdie open source oplossing wat maak die hantering van Excel 'n baie meer skoner.

http://excelwrapperdotnet.codeplex.com/

SpreadsheetGear is awesome. Ja dit is 'n uitgawe, maar in vergelyking met twiddling met hierdie ander oplossings, is dit die moeite werd om die koste. Dit is 'n vinnige, betroubare, baie omvattende, en ek moet sê na die gebruik van hierdie produk in my voltydse sagteware werk vir meer as 'n jaar en 'n half, hul kliënte ondersteuning is fantasties!

Die oplossing wat ons gebruik, wat nodig is om:

  • Laat lees / skryf van Excel lêers geproduseer
  • Wees Fast in prestasie (nie soos die gebruik van GMO's)
  • Wees MS Office Independent (benodig bruikbare te wees sonder kliënte met MS Office geïnstalleer)
  • Wees Free of Open Source (maar aktief ontwikkel)

Daar is 'n hele paar keuses, maar ons gevind NPoi (NET hawe van 'n lang bestaande Poi open source projek Java's) te wees die beste: http://npoi.codeplex.com/

Dit kan ook werk met Doc en Ppt lêerformate

As dit is net 'n tabel data. Ek sou aanbeveel lêer data helpers deur Marcos Melli wat hier kan afgelaai .

jy kan 'n Excel spreadsheet wat 'n gegewe excel spreadsheet laai en slaan dit as CSV (eerder as wat dit met die hand te doen) te skryf.

dan kan jy outomatiseer wat uit c #.

en een keer sy in CSV, kan die c # program grok dat.

(ook, as iemand jou vra om die program in excel, is dit die beste om jou voorgee nie weet hoe)

(wysig: Ag ja, beroof en Ryan is albei reg)

Ek weet dat mense is die maak van 'n Excel "uitbreiding" vir hierdie doel.
Jy min of meer 'n knoppie in Excel dat "Uitvoer na Program X", en dan uitvoer sê en stuur af die data in 'n formaat van die program kan lees.

http://msdn.microsoft.com/en-us/library /ms186213.aspx moet 'n goeie plek om te begin nie.

Sterkte

Net het 'n vinnige demonstrasie projek wat vereis die bestuur van 'n paar Excel-lêers. Die NET komponent van GemBox sagteware was voldoende vir my behoeftes. Dit het 'n gratis weergawe met 'n paar beperkinge.

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

Excel pakket is 'n oop-bron (GPL) komponent vir lees / skryf Excel 2007 lêers. Ek gebruik dit op 'n klein projek, en die API is eenvoudig. Werk met XLSX net (Excel 200 &), nie met XLS.

Die bron-kode blyk ook goed georganiseerde en maklik om rond te kry (as jy nodig het om funksies uit te brei of klein probleme op te los as wat ek gedoen het).

Op die eerste, ek probeer die ADO.Net (Excel verband string) benadering, maar dit was belaai met nare hacks - byvoorbeeld as tweede ry bevat 'n aantal, dit sal SY vir almal terugkeer velde in die tabel hieronder en rustig kolom drop enige data wat nie pas nie.

Ons gebruik ClosedXML in plaas van groot stelsels.

  • Free
  • Maklik om te installeer
  • reguit vorentoe kodering
  • Baie reageer ondersteuning
  • Ontwikkelaars span is extreem oop vir nuwe voorstelle. Dikwels nuwe funksies en foutregstellings geïmplementeer binne dieselfde week

Take.io Sigblad sal hierdie werk vir jou doen, en teen geen koste. Net 'n blik op hierdie .

Ek het net gebruik ExcelLibrary om 'n .xls spreadsheet in 'n datastel te laai. Gewerk groot vir my.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top