【问题标题】:How to fit the columns in an excel sheet如何在Excel工作表中调整列
【发布时间】: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 饶

标签: c# excel epplus


【解决方案1】:

由于连接字符串异常而发生外部表不是预期格式的异常,因此请使用以下示例检查您的连接字符串

public static string docPath= @"C:\sourcefolder\myfile.xlsx";
public static string ConnectionString= "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + docPath + ";Extended Properties=Excel 12.0;";

或者如果您使用 LinqToExcel,请检查您是否设置了 DatabaseEngine 属性,如下所示

public string docPath= @"C:\sourcefolder\myfile.xlsx";
var excelFile = new ExcelQueryFactory(docPath);
excelFile.DatabaseEngine = DatabaseEngine.Ace;

【讨论】:

  • 我正在使用 LinqToExcel 并不想使用连接字符串,并且当单元格格式正确@Saveendra Sri 时它工作正常
  • 检查天气数据库 DatabaseEngine 属性。看看编辑过的答案。
  • string sheetName = language.Culture; var excelFile = new ExcelQueryFactory(excelPath); IQueryable&lt;Row&gt; excelSheetValues = from workingSheet in excelFile.Worksheet(sheetName) select workingSheet;这就是我正在做的检索数据@Saveendra Sri Ekanayake
  • 像这样添加DatabaseEngine (excelFile.DatabaseEngine = DatabaseEngine.Ace;)
  • 是的,我试过了,即使这样也没有解决问题
猜你喜欢
  • 1970-01-01
  • 2015-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-12
相关资源
最近更新 更多