自动填充Excel列

时间:2019-10-23 12:49:00

标签: c# openxml openxml-sdk

我正在从应用程序中创建Excel,我想获取具有自动调整列大小的Excel文件。

在工作簿中填写表格后,我使用以下方法设置列:

public void AutoFitColumns(Sheet sheet)
{
    //get all cells in sheet
    IEnumerable<Cell> cells = GetCells(sheet);
    //find max column number
    int maxColumnIndex = cells.Select(a => GetColumnIndex(a.CellReference))
        .Where(a => a.HasValue)
        .Select(a => a.Value)
        .Distinct()
        .Max();

    Worksheet worksheet = GetWorkSheetPart(sheet).Worksheet;
    // Check if the column collection exists
    Columns cs = worksheet.Elements<Columns>().FirstOrDefault();

    if (cs == null)
    {
        // If Columns appended to worksheet after sheetdata Excel will throw an error.
        SheetData sd = worksheet.Elements<SheetData>().FirstOrDefault();
        if (sd != null)
            cs = worksheet.InsertBefore(new Columns(), sd);
        else
        {
            cs = new Columns();
            worksheet.Append(cs);
        }
    }

    Column c = new Column
    {
        Min = (uint)1,
        Max = (uint)maxColumnIndex,
        Width = 100D,
        CustomWidth = true,
        BestFit = true
    };
    cs.Append(c);
}

由于某种原因,我没有看到BestFit列的内容。我找到https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2010/cc802410(v=office.14)?redirectedfrom=MSDN的描述位置:

  

标记,指示指定的列是否设置为“最适合”。   在以下情况下,“最适合”设置为true:列   用户从未手动设置宽度,并且列宽为   不是默认宽度'最佳匹配'表示输入数字时   放入“最适合”列中包含的单元格中,列宽应   自动调整大小以显示数字。 [注意:在最合适的情况下,   列宽度一定不能变小,而只能变大。结束语]

因此,我尝试了几种方法来应用自动列宽,如文档中所述和“尝试/错误”方法所述

有人知道为什么这不起作用吗?

我的步骤如下:

  • 创建Excel中使用的样式和格式
  • 为每个单元格创建一个包含数据(正确格式的单个值)的表
  • 我要创建列,然后根据内容将表与自动列宽进行比较

0 个答案:

没有答案