1

Excel ファイルを読み取るコードを書いていますが、残念ながら Excel ファイルには 300 を超える列が含まれており、300 列すべてを読み取る必要があります。

このLinqToExcelを実行するためにいくつかのサードパーティライブラリを使用していますが、最大256列しか読み取ることができません

        var excel = new ExcelQueryFactory(FileName);

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

Microst Office がインストールされていないサーバーで実行されるため、できれば Microst Office をインストールせずに、300 列すべてを読み取る方法を知っている人はいますか?

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 のコンテンツを読み取り/変更できるため、必要なことを行うことができます

一部の (商用) サードパーティ ライブラリにはグリッド コントロールが付属しており、SpreadsheetGear、Aspose.Cells などのアプリケーション (Winforms/WPF/ASP.NET など) で Excel ファイルを使用してさらに多くのことを行うことができます。

于 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 に答える