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

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

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

与文件(文本文件或Excel文件)的问题,他们随着时间的推移增长。 有一个固定的数组大小是一个我不知道如何处理的问题。 我使用一种方法分别读取表单并将其存储在一个数组中。 不同的纸张具有不同的行数。 所以数组大小发布是我处理的一个问题。

我需要你的专家build议如何处理从文件读取数据通过使用数组或列表。 读取文件的目的是select所需的信息并将其放在.bat文件中。 这个.bat文件将启动具有设置的用户环境的外部程序。

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

在这里输入图像说明

例如,创build一个控制台应用程序。 然后得到一个名为“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()); } 

现在你有两个string集合,所以你可以实现你的逻辑,比如过滤并将它们写入你的.bat文件

另外,在运行时我们有:

在这里输入图像说明

从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。

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

上面的插图假设您知道您需要访问的工作表的名称。 如果因为任何原因你不知道这些,那么请在这里看到答案,以提取表名的最佳方式。