我的任务是解析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文件而不更改列宽,则保存它。代码不存在。
所以我的问题是如何获得列宽?
答案 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;
}
}