读写Excel文件C#

时间:2011-01-17 20:40:18

标签: c# excel

是否有任何易于实现的库可用于读取excel文件,以后可能会创建它们? 这是我最好的选择吗?

http://support.microsoft.com/kb/302084

11 个答案:

答案 0 :(得分:5)

试试这个:http://epplus.codeplex.com

  

EPPlus是一个读取和写入Excel 2007/2010文件的.net库   使用Open Office Xml格式(xlsx)。

答案 1 :(得分:4)

如果您愿意承诺使用更高版本的Excel(2007+),您还可以查看OpenXML SDK。它是免费的,不会让你在运行它的机器上安装MS Office,并且有很多关于如何在线使用它的资源availableincluding blogs from the OpenXML team)。

答案 2 :(得分:3)

有excel包加:

http://epplus.codeplex.com/

仅适用于xlsx,但无论如何Office 2003都在循环播放。

答案 3 :(得分:1)

您可以使用ExcelLibrary,虽然它仅适用于2003格式的.xls

  

该项目的目的是提供一个本机.NET解决方案,用于创建,读取和修改Excel文件,而无需使用COM互操作或OLEDB连接。

我有机会使用EPPLUS,这很精彩:),适用于2007/2010年使用的新excel格式.xlsx

  

EPPlus是一个.net库,你可以读写excel文件,创建图表,图片,形状......还有更多

另请查看此SO post

答案 4 :(得分:1)

我使用过oledb,interop,刚开始使用Epplus。到目前为止,epplus被证明是最简单的。 http://epplus.codeplex.com/

但是,我刚刚发布了一个与epplus有关的问题,但我发布了一些你可以用作参考的代码。

c# epplus error Removed Part: Drawing shape

答案 5 :(得分:0)

我曾经工作的公司对此进行了大量研究,并决定SoftArtisans的产品是他们最好的选择: OfficeWriter

我总是觉得奇怪的是,对Excel阅读和写作的支持是多么微弱。我很确定如果您使用Microsoft的库,您必须安装Excel,这就像OfficeWriter一样需要额外费用。

答案 6 :(得分:0)

您可以选择VBA或使用FileHelpers中的免费库。如果您打算购买一些商业解决方案,我建议ASPOSE

答案 7 :(得分:0)

根据this website,您需要包含对Microsoft Excel 12.0对象库的引用。从那里,你需要做一些事情来打开文件。网站上有一个代码示例。

PS - 对不起,它不是太详细,但我找不到Microsoft Office开发人员参考的详细信息。

答案 8 :(得分:0)

我使用了ExcelLibrary,效果非常好! (到目前为止它支持Excel 2003或更低版本)。

http://code.google.com/p/excellibrary/

答案 9 :(得分:0)

我喜欢使用ExcelDataReader进行阅读,并使用前面提到的EPPlus进行写作。 Here's an example

这是一个用它阅读的例子:

            FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);

        // Reading from a binary Excel file ('97-2003 format; *.xls)
        //            IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);

        // Reading from a OpenXml Excel file (2007 format; *.xlsx)
        IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);

        // DataSet - The result of each spreadsheet will be created in the result.Tables
        DataSet result = excelReader.AsDataSet();

        // Free resources (IExcelDataReader is IDisposable)
        excelReader.Close();

        var cdm = new ValueSetRepository();

        for (int i = 0; i < result.Tables.Count; i++)
        {
            // CHECK if tableNames filtering is specified
            if (tableNames != null)
            {
                // CHECK if a table matches the specified tablenames
                var tablename = result.Tables[i].TableName;
                if (!tableNames.Contains(tablename))
                {
                    continue;
                }
            }

            var lookup = new ValueSetLookup();
            lookup.CmsId = result.Tables[i].Rows[2][0].ToString();
            lookup.NqfNumber = result.Tables[i].Rows[2][1].ToString();
            lookup.Data = new List<ValueSetAttribute>();

            int row_no = 2;
            while (row_no < result.Tables[i].Rows.Count) // i is the index of table
            // (sheet name) which you want to convert to csv
            {
                var currRow = result.Tables[i].Rows[row_no];
                var valueSetAttribute = new ValueSetAttribute()
                {
                    Id = currRow[0].ToString(),
                    Number = currRow[1].ToString(),
                    tName = currRow[2].ToString(),
                    Code = currRow[7].ToString(),
                    Description = currRow[8].ToString(),
                };

                lookup.Data.Add(valueSetAttribute);
                row_no++;
            }

            cdm.AddRecord(lookup);

答案 10 :(得分:0)

是的,存在多个开放源代码库,以帮助使用C#读取和/或编写Excel电子表格。

以下是C#库的简短列表:

  1. Microsoft.Office.Interop.Excel

  2. ExcelDataReader

  3. NPOI

  4. ExcelMapper - NPOI extension

  5. EPPlus

维护了最新的策划列表here

示例:使用ExcelMapper读取Excel文件

a。通过在NuGet Packet Manager中运行以下命令,使用NuGet进行安装:

Install-Package ExcelMapper

b。 ExcelMapper的示例C#代码

    public void ReadExcelUsingExcelMapperExtension()
    {
        string filePath = @"C:\Temp\ListOfPeople.xlsx";
        var people = new ExcelMapper(filePath).Fetch<Person>().ToList();
    }

    public class Person
    {
      public string FirstName { get; set; }
      public string LastName { get; set; }
      public int Age { get; set; }
    }

免责声明我喜欢ExcelMapper的简洁性,因此包含了此程序包的示例代码。要使用其他库执行相同的操作,需要更多代码。