【问题标题】:How can I get column width via openxml and c#如何通过 openxml 和 c# 获取列宽
【发布时间】:2018-08-30 14:28:12
【问题描述】:

我的任务是解析一个 excel 文件并将其转换为 web 表格。 为了实现这个目标,我需要列号、每列的宽度、行号以及行内的每个单元格和单元格属性。

到目前为止,我可以获得行、单元格、边框、字体等单元格属性。但我无法获得列宽。

当我打开 excel 文件并通过以下代码获取列时

Columns columns = sheet.Descendants<Columns>().FirstOrDefault()

但是,有时我可以得到它,有时值是空的。

我通过 openxml 工具读取了 excel 文件。以下代码并不总是存在。

Columns columns1 = new Columns();
Column column1 = new Column(){ Min = (UInt32Value)7U, Max = (UInt32Value)7U, Width = 39.6328125D, CustomWidth = true };
columns1.Append(column1);

如果您打开一个空的 excel 文件并且不更改列宽,则保存它。代码不存在。

所以我的问题是如何获得列宽?

【问题讨论】:

  • 可以使用 Excel 互操作吗?如果是这样,请看这里:stackoverflow.com/questions/32392541/…
  • 您使用什么技术来解析 xml ?它看起来像 Open Xml SDK,但我可能错了......
  • @vasil oreshenski,我正在使用 open xml sdk

标签: c# openxml


【解决方案1】:

列宽可以具有默认宽度或自定义宽度。正如您所说,可以从Column.Width property 读取自定义宽度。如果设置了默认列宽,则可以从SheetFormatProperties Class读取。但是,如果 DefaultColumnWidth 属性设置为 null,则 The default column width is 8.43 characters

获取DefaultColumnWidth

using (SpreadsheetDocument spreadSheetDocument = SpreadsheetDocument.Open(filePath, true))
{
    WorkbookPart workbookPart = spreadSheetDocument.WorkbookPart;
    IEnumerable<Sheet> sheets = spreadSheetDocument.WorkbookPart.Workbook.GetFirstChild<Sheets>().Elements<Sheet>();
    string relationshipId = sheets.First().Id.Value;
    WorksheetPart worksheetPart = (WorksheetPart)spreadSheetDocument.WorkbookPart.GetPartById(relationshipId);
    Worksheet workSheet = worksheetPart.Worksheet;

    var sheetFormatProps = workSheet.SheetFormatProperties;
    var defaultColWidth = sheetFormatProps.DefaultColumnWidth;
    if (defaultColWidth == null)
    {
        defaultColWidth = 8.43;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    • 2017-05-12
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    • 2013-05-08
    相关资源
    最近更新 更多