获取单元格内容大小
使用SpreadStreamProcessing的文本测量功能,您可以获得特定内容的大小,并使用它分别将高度和宽度应用于行和列。
为什么需要它?
SpreadStreamProcessing设计用于在生成文档时直接在流中写入内容。虽然这在性能和内存使用方面带来了很大的好处,但它也限制了内容的自动大小调整。自动将单元格内容放入列中意味着库应该测量该列中的每个单元格内容,并在需要时更改其宽度。但是,在将单元格内容写入流时,该列已被定义,不能再进行修改。为了克服这个限制,SpreadStreamProcessing公开了CellContentSizeHelper类。
使用CellContentSizeHelper
CellContentSizeHelper是一个静态类,它公开了GetCellContentSize方法的两个重载。这些重载允许您将应用到单元格的格式作为SpreadCellFormat或作为单独的值传递。
类的引用才能使用此类Telerik.Windows.Documents.Spreadsheet.dll用于。net框架项目或Telerik.Documents.Spreadsheet.dll用于。net标准项目。
为了在.NET标准中获得准确的结果,建议使用SpreadFixedTextMeasurer.
使用SpreadCellFormat测量单元格内容
的过载之一GetCellContentSize属性使您能够获得特定单元格值所需的大小SpreadCellFormat到它。下面列出了该方法的参数:
- 字符串值:单元格值。如果传递了formula,该方法将抛出一个ArgumentException。
- SpreadCellFormat SpreadCellFormat:单元格的格式。
- 双cellWidth:可选的。单元格的宽度,以像素为单位。这种价值只有在有价值的情况下才会受到尊重
WrapText
的属性spreadCellFormat
是真正的
.默认列宽度为65像素.
用单独的格式值测量单元格内容
GetCellContentSize暴露了一个重载,允许您为单元格的格式化属性传递单独的值,这些值可以影响单元格内容的大小。以下是重载接受的参数:
- 字符串值:单元格值。如果传递了formula,该方法将抛出一个ArgumentException。
- 字符串cellValueFormat:单元格的数字格式。
- 字符串fontFamily:字体族名称。
- 双字形大小:字体大小。
- bool isBold:表示文本是否粗体的值。
- bool isItalic:指示文本是否为斜体的值。
- SpreadHorizontalAlignment horizontalAlignment:水平对齐。
- bool isWrapped:指示文本是否换行的值。
- int缩进:单元格缩进。
- 双cellWidth:可选的。单元格的宽度,以像素为单位。这种价值只有在有价值的情况下才会受到尊重
WrapText
的属性spreadCellFormat
是真正的
.默认列宽度为65像素.
例子
下面的示例展示了如何创建电子表格文档、测量单元格的内容并将宽度应用于列,使这些列自动适应其内容。
例1:创建自动匹配列宽的电子表格
public static void ExportSpreadsheet(SpreadDocumentFormat documentFormat, string fileName) {SpreadBorder border = new SpreadBorder(SpreadBorderStyle. exe)薄,新的SpreadThemableColor(新的SpreadColor(125, 125, 0)));SpreadCellFormat format = new SpreadCellFormat() {NumberFormat = "@", IsBold = true, IsItalic = true, LeftBorder = border, RightBorder = border, TopBorder = border, BottomBorder = border, WrapText = false};string[] vegetablesToExport = new string[]{"胡萝卜","西兰花","黄瓜","茄子","生菜","卷心菜","番茄"};双vegetablesColumnWidth;CalculateColumnWidth(format, vegetablesToExport, out vegetablesColumnWidth);使用(FileStream流=文件。打开(fileName, FileMode.OpenOrCreate)) {using (iworkbookexport workbook = spradexporter。createworksheetexport (documentFormat, stream)) {using (iworksheetexport worksheet =工作簿。createworksheetexport ("Vegetables List"))) {using (IColumnExporter column = worksheet.CreateColumnExporter()) {column. setwidthinpixels (vegetablesColumnWidth);} for (int rowIndex = 1; rowIndex < vegetablesToExport.Length + 1; rowIndex++) { using (IRowExporter row = worksheet.CreateRowExporter()) { string vegetable = vegetablesToExport[rowIndex - 1]; using (ICellExporter cell = row.CreateCellExporter()) { cell.SetValue(vegetable); cell.SetFormat(format); } } } } } } } private static void CalculateColumnWidth(SpreadCellFormat format, string[] values, out double columnWidth) { columnWidth = 0; foreach (var value in values) { double contentWidth = CellContentSizeHelper.GetCellContentSize(value, format).Width; if (contentWidth > columnWidth) { columnWidth = contentWidth; } } }