【发布时间】:2015-07-10 14:54:22
【问题描述】:
我正在将一个列表写入使用EPPlus 和.xlsx 扩展名生成的Excel 工作表。然后使用worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns(); 方法我尝试适应列。
这就是我写数据的方式
using (ExcelPackage xlPackage = new ExcelPackage(newFile))
{
System.Data.DataTable dt = new System.Data.DataTable();
var ws = xlPackage.Workbook.Worksheets.FirstOrDefault(x => x.Name == language.Culture);
if (ws == null)
{
int i = 1, j = 0;
worksheet = xlPackage.Workbook.Worksheets.Add(language.Culture);
foreach (ExcelFields fieldValues in UnmatchedFieldList)
{
//code
}
else
{
int i = 0;
worksheet = xlPackage.Workbook.Worksheets[language.Culture];
colCount = worksheet.Dimension.End.Column;
rowCount = worksheet.Dimension.End.Row;
foreach (ExcelFields fieldValues in UnmatchedFieldList)
{
worksheet.Cells[rowCount + 1, count + 1].Value = itemName;
}
worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns();
xlPackage.Save();
}
我读取数据为
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();
在 headerRow 它抛出以下错误
当我试图从 excel 中读取数据时,它会引发异常
外部表不是预期的格式
我发现,这是由于列的格式(宽度)不正确。当我通过双击单元格手动设置列宽并运行代码时,它工作正常
所以我想用代码来实现这个
【问题讨论】:
-
您能否发布所有生成文件然后读取它的代码?
-
查看我更新的问题@Ernie
-
看来你是想用 EPPlus 写入数据并用 Linq2Excel 读取数据?与此非常相似:stackoverflow.com/questions/31165959/…。问题是 EPPlus 不会生成完全格式化的 excel 文件 - 它会在重命名的 zip 文件中创建原始基本 XML(xlsx 只是一个 zip 文件)。然后当你在excel中打开它就完成了。我怀疑 L2E 期望它完全格式化你最好的选择是在 EPPlus 中做所有事情。在 EPPlus 中无法做到的您需要 L2E 什么?
-
我们不能使用 Linq2Excel 读取数据吗?当我尝试了上述答案时,它给我一个错误@Ernie
-
看起来好像你做不到,因为没有其他人参与进来。就像我之前问过的,你想在 L2E 中做哪些你不能用 EPPlus 做的事情?如果您必须拥有 L2E,那么 EPPlus 可能不是最佳选择。 @D 饶