读取文件并存储在C#中的列表或数组中

时间:2017-08-31 03:24:35

标签: c# arrays excel

我有文本和电子表格(Excel)格式的文件,它们包含相同的信息,除了Excel格式我将它们分成不同的表格。在Excel格式的情况下,行数不同。需要读取文件并将它们存储到列表或数组中。在玩了一些代码之后,由于我还是C#的新手,我注意到使用数组时存在限制。我们需要设置大小,例如

string[,] fileRecord = new string[10,10];

文件(文本文件或Excel文件)存在问题,随着时间的推移它们会逐渐增大。固定阵列大小是一个我不知道如何处理的问题。我使用一种方法单独读取纸张并将它们存储在一个数组中。不同的工作表具有不同的行数。所以数组大小的帖子对我来说是个问题。

我需要您的专家建议,如何使用数组或列表处理文件中的读取数据。读取文件的目的是选择所需的信息并将它们放在.bat文件中。此.bat文件将启动具有设置用户环境的外部程序。

2 个答案:

答案 0 :(得分:0)

假设我们有一个名为ExcelFile的Excel文件,其中包含两个相同的工作表:

enter image description here

让我们创建一个控制台应用程序。然后获取名为“Microsoft.Office.Interop.Excel”的NuGet包。确保你有一个

using Microsoft.Office.Interop.Excel;

和项目参考中的Microsoft.Office.Interop.Excel程序集。

例如,在Main方法中,您可以使用以下代码:

        string filePath = @"D:\ExcelFile.xlsx";

        var application = new Application();

        var workbook = application.Workbooks.Open(filePath);

        var firstWorksheet = workbook.Worksheets[1];
        var secondWorksheet = workbook.Worksheets[2];

        //Assuming that we want to read all cells from A1 to last used
        var firstWorkSheetValues = firstWorksheet.Range["A1:" + firstWorksheet.Cells.SpecialCells(XlCellType.xlCellTypeLastCell).Address].Value; // dynamic {object[,]} in runtime
        var secondWorkSheetValues = secondWorksheet.Range["A1:" + secondWorksheet.Cells.SpecialCells(XlCellType.xlCellTypeLastCell).Address].Value;

        // Use the code below if Lists<> are necessary. It can be List<object>, but if we want List<string>, use ToString()

        var firstWorkSheetValuesList = new List<string>(); 
        var secondWorkSheetValuesList = new List<string>();

        foreach (var i in firstWorkSheetValues)
        {
            firstWorkSheetValuesList.Add(i.ToString());
        }

        foreach (var i in secondWorkSheetValues)
        {
            secondWorkSheetValuesList.Add(i.ToString());
        }          

现在您有两个字符串集合,因此您可以在它们上实现逻辑,例如过滤并将它们写入.bat文件

此外,在运行时我们有:

enter image description here

答案 1 :(得分:0)

从Excel电子表格中读取数据的最简单方法之一是使用OleDbDataAdapter。假设数据以表格格式排列,您可以执行以下操作:

string xlConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=yourfilepathandname.xlsx;Extended Properties='Excel 8.0;HDR=No;IMEX=1';";

var xlConn = new OleDbConnection(xlConnStr);
var da = new OleDbDataAdapter("SELECT * FROM [yourSheetName$]", xlConn);
var xlDT = new DataTable();
da.Fill(xlDT);

现在,您可以在DataTable中的行和列中排列数据。要获得每个的计数,您只需分别访问xlDT.Rows.Count和xlDT.Columns.Count。

如果电子表格中的第一行包含列标题,则需要在连接字符串中设置HDR = Yes。

上图假设您知道需要访问的工作表的名称。如果由于任何原因您不知道这些,请查看答案here以获取提取工作表名称的最佳方法。