По какой-то причине ExcelReaderFactory.CreateOpenXmlReader()
выдает NullReferenceException
при попытке прочитать файлы .xlsx, созданные кодом.Для создания документов я использую библиотеку OpenXml.Вот способ создания .xlsx, который я использовал в своем коде:
public void CreateExcelFile(string filePath, string[][] rowsData)
{
using (SpreadsheetDocument spreedDocument = SpreadsheetDocument.Create(filePath, SpreadsheetDocumentType.Workbook))
{
WorkbookPart workbookPart = spreedDocument.WorkbookPart;
if (workbookPart == null)
{
workbookPart = spreedDocument.AddWorkbookPart();
workbookPart.Workbook = new Workbook();
}
var worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
var sheetData = new SheetData();
worksheetPart.Worksheet = new Worksheet(sheetData);
if (workbookPart.Workbook.Sheets == null)
{
workbookPart.Workbook.AppendChild(new Sheets());
}
var sheet = new Sheet()
{
Id = workbookPart.GetIdOfPart(worksheetPart),
SheetId = 1,
Name = "Sheet1"
};
var excelRowIndex = 1;
foreach (var row in rowsData)
{
var excelRow = new Row {RowIndex = (UInt32) excelRowIndex};
foreach (var value in row)
{
excelRow.AppendChild(AddCellWithText(value));
}
sheetData.AppendChild(excelRow);
excelRowIndex++;
}
workbookPart.Workbook.Sheets.Append(sheet);
workbookPart.Workbook.Save();
}
}
public static Cell AddCellWithText(string text)
{
var cell = new Cell {DataType = CellValues.InlineString};
var inlineString = new InlineString();
var cellText = new Text {Text = text};
inlineString.AppendChild(cellText);
cell.AppendChild(inlineString);
return cell;
}
Проблема возникает только для файлов .xlsx, сгенерированных кодом.Для документов, созданных в Excel, все работает нормально.Поэтому я думаю, что есть некоторые проблемы в создании файлов.Есть идеи?
Обновление: это код, где происходит исключение:
static DataSet ReadExcelFile(string filePath, bool isFirstRowColumnNames = false)
{
DataSet result;
using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (var excelReader = ExcelReaderFactory.CreateOpenXmlReader(fs))
// ...