如何通过openxml和c#

时间:2018-03-21 12:52:12

标签: c# openxml

我的任务是解析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文件而不更改列宽,则保存它。代码不存在。

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

1 个答案:

答案 0 :(得分:2)

列宽可以是默认宽度或自定义宽度。如您所述,可以从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;
    }
}