2012-08-30 169 views
1

我写一些代码来读取Excel文件,但unfortuantely Excel文件包含超过300列,我需要阅读所有300读取Excel文件

我已经使用了一些第3部分库做这LinqToExcel但他们只能读取一个最大256列

 var excel = new ExcelQueryFactory(FileName); 

     var recs = (from ws in excel.Worksheet<Sample>("data export final") 
        select ws).ToList() 

的有谁知道我可以读取所有300列,preferabbly无需安装1.806处,因为这将它没有按”一台服务器上运行没有安装

+0

你一个大的输入文件中的自包含的例子可以尝试Koogra - http://sourceforge.net/projects/koogra - 因为它与Excel 2007文件一起工作(256列限制解除时).. – stuartd

+0

如果你愿意超越.Net,那么Perl和Python有开源模块可用于处理电子表格。 – David

回答

3

EPPlus可以读写> 256列。这里是展示写入列300

FileInfo newFile = new FileInfo(@"C:\Temp\sample300.xlsx"); 
if (newFile.Exists) 
{ 
    newFile.Delete(); // ensures we create a new workbook 
    newFile = new FileInfo(@"C:\Temp\sample300.xlsx"); 
} 

using (ExcelPackage package = new ExcelPackage(newFile)) 
{ 
    // add a new worksheet to the empty workbook 
    ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Inventory"); 
    //Add the headers 
    worksheet.Cells[1, 1].Value = "ID"; 
    worksheet.Cells[1, 300].Value = "Col 300"; 
    package.Save(); 
} 

来自300多个列读一短的例子也很简单,但它很难张贴包括:-)

+0

这太棒了。谢谢 –

+0

EPPlus可以读取较旧的.xls文件吗? –

+0

@ChrisK:不,只有.xlsx文件。 (开源)开发者采取的立场是,他们不应该为开发旧技术而投入无偿时间:-) –

2

有几个选项 - 所有涉及一些额外的库:

的OpenXML 2.0(从MS免费库)可以用来读取/修改的.xlsx的内容,所以你可以用它做你想要什么

一些(商业)第三方库带有网格控件,允许您在应用程序中使用excel文件(例如Winforms/WPF/ASP.NET ...)进行更多操作,如SpreadsheetGear,Aspose.Cells等。

+0

我会使用Aspose或Open XML – Remy

+0

Aspose不是免费的。 Open XML比EPPlus更难使用imho。 –

+0

是EPPlus是更好,但我告诉我用什么才能够帮助它.. – Hassanation

0

您可以使用此代码尝试基于OleDbDataAdapter

  string filename = @"....xls"; 
      string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + 
              "Data Source=" + filename + ";" + 
              "Extended Properties=Excel 8.0;"; 

      OleDbDataAdapter dataAdapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString); 
      DataSet myDataSet = new DataSet(); 
      dataAdapter.Fill(myDataSet, "Sample"); 
      DataTable dataTable = myDataSet.Tables["Sample"]; 


      var rows = from p in dataTable.AsEnumerable() 
         select new 
         { 
          Property = p.Field<string>("Column") 
         };