【发布时间】:2015-07-01 15:44:20
【问题描述】:
使用EPPlus 我正在将数据写入多个工作表。如果未创建工作表,我将添加工作表,否则我将检索已使用的行并从该行添加数据并保存它
FileInfo newFile = new FileInfo("Excel.xlsx");
using (ExcelPackage xlPackage = new ExcelPackage(newFile))
{
var ws = xlPackage.Workbook.Worksheets.FirstOrDefault(x => x.Name == language.Culture);
if (ws == null)
{
worksheet = xlPackage.Workbook.Worksheets.Add(language.Culture);
//writing data
}
else
{
worksheet = xlPackage.Workbook.Worksheets[language.Culture];
colCount = worksheet.Dimension.End.Column;
rowCount = worksheet.Dimension.End.Row;
//write data
}
worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns();
xlPackage.Save();
而且效果很好。
现在我想使用LinqToExcel 检索 excel 中每个工作表的列名,这是我的代码
string sheetName = language.Culture;
var excelFile = new ExcelQueryFactory(excelPath);
IQueryable<Row> excelSheetValues = from workingSheet in excelFile.Worksheet(sheetName) select workingSheet;
string[] headerRow = excelFile.GetColumnNames(sheetName).ToArray();
在标题行它给我一个异常
An OleDbException exception was caught
External table is not in the expected format.
但我不想使用 Oledb,而是想使用 Linq To Excel。
注意:当我使用单张而不是多张时 它工作正常并检索所有列。我哪里错了。
【问题讨论】:
-
如果在从 epplus 导出后但在使用 linq2excel 打开之前打开并保存工作表在 excel 中会发生什么?可能是 epp 只是生成了原始 xml,但在 excel 处理完所有内容之前不会真正生成工作表。
-
我应该怎么做才能获得所有列名@Ernie
-
这能解决问题吗?无论哪种方式都很好知道。如果是这样,可能没有实际的解决方案。您可以使用 EPPlus 而不是 Ole 来重新打开 excel 文件吗?
-
实际上问题的出现是因为列没有正确安装,如果手动排列列宽效果很好,我想知道如何以编程方式进行。我试过
worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns();@Ernie
标签: linq excel epplus linq-to-excel vba