1

我正在编写一些代码来读取 excel 文件,但不幸的是 excel 文件包含 300 多列,我需要读取所有 300 列。

我一直在使用一些第 3 部分库来执行此LinqToExcel,但它们最多只能读取256 列

        var excel = new ExcelQueryFactory(FileName);

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

有谁知道我如何阅读所有 300 列,最好不必安装 Microst Office,因为它将在没有安装的服务器上运行

4

3 回答 3

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+ 列中读取同样容易,但发布包含大型输入文件的独立示例则更加困难 :-)

于 2012-08-30T16:26:00.633 回答
2

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

OpenXML 2.0(来自 MS 的免费库)可用于读取/修改 .xlsx 的内容,因此您可以随心所欲地使用它

一些(商业)第 3 方库带有网格控件,允许您在应用程序(无论是 Winforms/WPF/ASP.NET...)中使用 Excel 文件做更多事情,例如 SpreadsheetGear、Aspose.Cells 等。

于 2012-08-30T16:15:23.507 回答
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")
                       };
于 2012-08-30T16:20:40.197 回答