读取文件并将其存储在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。
上面的插图假设您知道您需要访问的工作表的名称。 如果因为任何原因你不知道这些,那么请在这里看到答案,以提取表名的最佳方式。