此代码生成Excel电子表格使用openxml包。请任何人告诉如何自动调整其列宽。
OpenXmlPackage.SpreadsheetDocument spreadsheetDocument = OpenXmlPackage.SpreadsheetDocument.Create(downloadFilePath, OpenXml.SpreadsheetDocumentType.Workbook);
// Add a WorkbookPart to the document.
OpenXmlPackage.WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart();
// Add a WorksheetPart to the WorkbookPart.
workbookpart.Workbook = new OpenXmlSpreadsheet.Workbook();
int numDates = datesObject.Length;
// Add Sheets to the Workbook.
OpenXmlSpreadsheet.Sheets sheets = new OpenXmlSpreadsheet.Sheets();
OpenXml.UInt32Value sheetId = 1;
OpenXmlPackage.WorksheetPart firstWorksheetPart = workbookpart.AddNewPart<OpenXmlPackage.WorksheetPart>();
firstWorksheetPart.Worksheet = new OpenXmlSpreadsheet.Worksheet(new OpenXmlSpreadsheet.SheetData());
// Append a new worksheet and associate it with the workbook.
OpenXmlSpreadsheet.Sheet firstSheet = new OpenXmlSpreadsheet.Sheet() { Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(firstWorksheetPart), SheetId = sheetId, Name = "Summary" };
sheets.Append(firstSheet);
sheetId++;
OpenXmlSpreadsheet.SheetData firstSheetData = firstWorksheetPart.Worksheet.GetFirstChild<OpenXmlSpreadsheet.SheetData>();
DataTable summaryTable = new DataTable();
summaryTable.Clear();
summaryTable.Columns.Add("name");
summaryTable.Columns.Add("value");
DataRow _summaryInfo = summaryTable.NewRow();
_summaryInfo["name"] = "Clinic Name";
_summaryInfo["value"] = userInfo[0];
summaryTable.Rows.Add(_summaryInfo);
int firstRowCount = summaryTable.Rows.Count;
for (int rowNumber = 1; rowNumber <= firstRowCount; rowNumber++)
{
DataRow dataRow = summaryTable.Rows[rowNumber - 1];
OpenXmlSpreadsheet.Row contentRow = ExcelHandler.createContentRow(dataRow, rowNumber);
firstSheetData.AppendChild(contentRow);
}
firstWorksheetPart.Worksheet.Save();
答案 0 :(得分:13)
自动匹配逻辑是由Microsoft Excel实现的,不是OpenXML电子表格格式的一部分。自动拟合包括测量每个单元格中的值的宽度(或高度)并找到最大值。
为了在您自己的代码中实现自动调整,您必须手动测量文本;您可以使用TextRenderer.MeasureText
或Graphics.MeasureString
使用适当的格式标记(禁用前缀字符)。这将为您提供像素大小,您需要将其转换为Excel的复杂列宽单位。其公式为:
width =截断([{字符数}} * {最大数字宽度} + {5像素填充}] / {最大数字宽度} * 256)/ 256
取自本文:Column Class (DocumentFormat.OpenXml.Spreadsheet)
(最大数字宽度可以通过使用工作簿的默认字体测量'0'
字符的宽度来确定 - 告诉你它是错综复杂的!)
使用此公式获取单元格宽度后,您可以找到最大值并将其应用于Column.Width
属性。
Microsoft Excel呈现文本的方式存在细微差别(与GDI / GDI +的比较方式相比),因此这种方法不是100%准确 - 但它足以满足大多数用途,您可以随时添加一些额外的填充确保合适。