我有文本和电子表格(Excel)格式的文件,它们包含相同的信息,除了Excel格式我将它们分成不同的表格。在Excel格式的情况下,行数不同。需要读取文件并将它们存储到列表或数组中。在玩了一些代码之后,由于我还是C#的新手,我注意到使用数组时存在限制。我们需要设置大小,例如
string[,] fileRecord = new string[10,10];
文件(文本文件或Excel文件)存在问题,随着时间的推移它们会逐渐增大。固定阵列大小是一个我不知道如何处理的问题。我使用一种方法单独读取纸张并将它们存储在一个数组中。不同的工作表具有不同的行数。所以数组大小的帖子对我来说是个问题。
我需要您的专家建议,如何使用数组或列表处理文件中的读取数据。读取文件的目的是选择所需的信息并将它们放在.bat文件中。此.bat文件将启动具有设置用户环境的外部程序。
答案 0 :(得分:0)
假设我们有一个名为ExcelFile的Excel文件,其中包含两个相同的工作表:
让我们创建一个控制台应用程序。然后获取名为“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文件
此外,在运行时我们有:
答案 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以获取提取工作表名称的最佳方法。