打开XML读取Excel文件不进入循环读取excelsheet
Open XML Reading Excel file does not enter loop to read excel sheet
我有一个场景,我需要在 MVC 应用程序中读取 Excel 文件,我需要在服务器上 运行,因此我正在使用 Open XML,我有一个问题,我的代码没有进入 sheet 中的行循环,请查看下面的代码并就如何纠正我的代码提出建议。
if (file.ContentLength > 0)
{
string path = file.FileName;
using (SpreadsheetDocument doc = SpreadsheetDocument.Open(path, false))
{
WorkbookPart workbookPart = doc.WorkbookPart;
WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();
foreach (Row r in sheetData.Elements<Row>())
{
foreach (Cell c in r.Elements<Cell>())
{
string text = c.CellValue.Text;
}
}
}
}
任何想法,您的帮助将不胜感激,我一直在尝试多种方法,但由于某些奇怪的原因我没有进入 foreach 循环。
我使用的是 Excel 2013,请看下图我的工作簿。
我一直在使用以下代码,对我来说效果很好。
using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(sFileNameWithPath, false))
{
WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;
WorksheetPart worksheetPart = GetWorksheetPart(workbookPart, sSheetName);
SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();
bool bHasChildren = sheetData.HasChildren;
if (bHasChildren)
{
for (int iCounter1 = 1; iCounter1 < sheetData.Elements<Row>().Count(); iCounter1++)
{
Row rDataRow = sheetData.Elements<Row>().ElementAt(iCounter1);
for (int iCounter = 0; iCounter < rDataRow.ChildElements.Count; iCounter++)
{
Cell oCell = (Cell)rDataRow.ChildElements[iCounter];
}
}
}
}
如果这有帮助,请告诉我。
或者您可以使用您的代码进行以下更改
using (SpreadsheetDocument doc = SpreadsheetDocument.Open(sFileNameWithPath, false))
{
WorkbookPart workbookPart = doc.WorkbookPart;
string relId = workbookPart.Workbook.Descendants<Sheet>().First(s => "Claims".Equals(s.Name)).Id;
WorksheetPart worksheetPart = (WorksheetPart)workbookPart.GetPartById(relId);
SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();
foreach (Row r in sheetData.Elements<Row>())
{
foreach (Cell c in r.Elements<Cell>())
{
string text = c.CellValue.Text;
}
}
}
请注意,我使用了excel sheet 名称"Claims",因此请检查它是否有效,如果有效;把它放在另一个函数中使其通用
我有一个场景,我需要在 MVC 应用程序中读取 Excel 文件,我需要在服务器上 运行,因此我正在使用 Open XML,我有一个问题,我的代码没有进入 sheet 中的行循环,请查看下面的代码并就如何纠正我的代码提出建议。
if (file.ContentLength > 0)
{
string path = file.FileName;
using (SpreadsheetDocument doc = SpreadsheetDocument.Open(path, false))
{
WorkbookPart workbookPart = doc.WorkbookPart;
WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();
foreach (Row r in sheetData.Elements<Row>())
{
foreach (Cell c in r.Elements<Cell>())
{
string text = c.CellValue.Text;
}
}
}
}
任何想法,您的帮助将不胜感激,我一直在尝试多种方法,但由于某些奇怪的原因我没有进入 foreach 循环。
我使用的是 Excel 2013,请看下图我的工作簿。
我一直在使用以下代码,对我来说效果很好。
using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(sFileNameWithPath, false))
{
WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;
WorksheetPart worksheetPart = GetWorksheetPart(workbookPart, sSheetName);
SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();
bool bHasChildren = sheetData.HasChildren;
if (bHasChildren)
{
for (int iCounter1 = 1; iCounter1 < sheetData.Elements<Row>().Count(); iCounter1++)
{
Row rDataRow = sheetData.Elements<Row>().ElementAt(iCounter1);
for (int iCounter = 0; iCounter < rDataRow.ChildElements.Count; iCounter++)
{
Cell oCell = (Cell)rDataRow.ChildElements[iCounter];
}
}
}
}
如果这有帮助,请告诉我。
或者您可以使用您的代码进行以下更改
using (SpreadsheetDocument doc = SpreadsheetDocument.Open(sFileNameWithPath, false))
{
WorkbookPart workbookPart = doc.WorkbookPart;
string relId = workbookPart.Workbook.Descendants<Sheet>().First(s => "Claims".Equals(s.Name)).Id;
WorksheetPart worksheetPart = (WorksheetPart)workbookPart.GetPartById(relId);
SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();
foreach (Row r in sheetData.Elements<Row>())
{
foreach (Cell c in r.Elements<Cell>())
{
string text = c.CellValue.Text;
}
}
}
请注意,我使用了excel sheet 名称"Claims",因此请检查它是否有效,如果有效;把它放在另一个函数中使其通用