gpt4 book ai didi

c# - 如何使用 OpenXML 包自动调整 excel 列

转载 作者:太空狗 更新时间:2023-10-29 22:15:56 24 4
gpt4 key购买 nike

此代码使用 openxml 包生成 Excel 电子表格。请任何人告诉如何自动调整其列宽。

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();

最佳答案

自动调整逻辑是由 Microsoft Excel 实现的,不是 OpenXML 电子表格格式的一部分。自动调整涉及测量每个单元格中值的宽度(或高度)并找到最大值。

为了在您自己的代码中实现自动调整,您将不得不手动测量文本;您可以使用带有适当格式标志(禁用前缀字符)的 TextRenderer.MeasureTextGraphics.MeasureString。这将为您提供以像素为单位的大小,您需要将其转换为 Excel 复杂的列宽单位。其公式为:

width = Truncate([{字符数} * {最大数字宽度} + {5 像素填充}]/{最大数字宽度}*256)/256

摘自这篇文章:Column Class (DocumentFormat.OpenXml.Spreadsheet)

(最大数字宽度可以通过使用工作簿的默认字体测量 '0' 字符的宽度来确定 - 告诉你它很复杂!)

使用此公式获得单元格宽度后,您可以找到最大值并将其应用于 Column.Width 属性。

Microsoft Excel 呈现文本的方式存在细微差别(与 GDI/GDI+ 的呈现方式相比),因此此方法并非 100% 准确 - 但它足以满足大多数用途,并且您始终可以添加一些额外的填充确保合适。

关于c# - 如何使用 OpenXML 包自动调整 excel 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31197038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com