我在c sharp中运行了一些基于openXML的代码,这些代码卡在第一行数据上并且一次又一次地循环。我很清楚,我需要将行变量合并到混合中,但尝试过各种方法无济于事。任何人有任何想法呢?从电子表格中读取OpenXML卡在第一行
在下面的代码块中,sst.ChildElements [7] .InnerText获取第一行第7列的内容,但每次循环它的内容都来自同一个CELL!我想移动到下一行:-(
string fileName = @"c:\temp\accountData.xlsx";
using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (SpreadsheetDocument doc = SpreadsheetDocument.Open(fs, false))
{
WorkbookPart workbookPart = doc.WorkbookPart;
SharedStringTablePart sstpart = workbookPart.GetPartsOfType<SharedStringTablePart>().First();
SharedStringTable sst = sstpart.SharedStringTable;
WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
Worksheet sheet = worksheetPart.Worksheet;
var cells = sheet.Descendants<Cell>();
var rows = sheet.Descendants<Row>();
Console.WriteLine("Row count = {0}", rows.LongCount());
Console.WriteLine("Cell count = {0}", cells.LongCount());
CompanyProvider cp = _db.GetCompanyProvider();
int i = 0;
// Or... via each row
foreach (Row row in rows.ToList())
{
if (i == 0)
i = i + 1;
else
{
CustomerAddress customerAddress = new CustomerAddress();
customerAddress.AddressLine1 = sst.ChildElements[7].InnerText; // Code hidden for brevity
i = i + 1;
}
}
}
}
你有一个foreach,但你从不使用行对象。为什么? – SergeyAn
我使用行对象进行的任何尝试都无法使其工作。 row.Elements可能是开始,但无法获得我需要的表达式。我想通过0,1,2,3,4列中的每一列逐行引用列,因此我可以在db中填充字段。示例所有循环单元格 – John
是否所有单元格都填充在电子表格中?例如,如果你有一行空的第一个单元格,那么'ChildElements [7]'将是第8个单元格。您也可以使用'foreach(row.Skip(1).ToList())行'而不是整数检查 –