我使用Spreadsheetgear生成Excel工作簿.
我的工作簿非常简单:
在过程结束时,我打电话myRange.Columns.AutoFit(),然后我保存工作簿.
当我用Excel打开它时,自动调整几乎是好的,但它仍然会错过每列中大约1.2个宽度单位.
这是AutoFit()实施中的错误还是我错过了什么?
实际上,我在6个月前构建我的实现时,实际上已经向SpreadsheetGear提供了支持.我提到b/c他们的AutoFit()不完全正确,我必须在自动调整后为每个列添加"软糖因子".支持者的回应基本上是与Excel的已知差异,他们不将其归类为错误.以下是他们对我说的话:
在SpreadsheetGear和Excel之间略微关闭自动调整列的原因是.NET和GDI +提供给我们的字体指标与Excel中使用的字体指标不同.因为列维度与工作簿中使用的字体相关联,因此字体度量标准,不幸的是,尝试完全匹配Excel是不可能的.我们尽力匹配Excel,但在所有情况下都不可能完全匹配它们.
有趣的是,Excel实际上与字体度量计算非常不一致; 尝试使用SpreadsheetGear创建一个包含长文本的工作簿,可能会向单元格添加40-50个"a"字符.现在将该工作簿保存到磁盘并在Excel 2007或2010中打开它,使用右下角的缩放滑块在不同的点放大和缩小,并注意文本相对于列宽相当多地移动.SpreadsheetGear与此类场景更加一致.
无论如何,您在列宽上添加一点"软糖因子"的方法是我们建议的最佳解决方法.它是"hackish"但是我们无法改进它,因为你在处理两个不同的环境和Excel本身的不一致指标.
这里是我用来根据需要扩大列的"软糖因素":
ws.UsedRange.Columns.AutoFit()
For col As Integer = 0 To ws.UsedRange.ColumnCount - 1
ws.Cells(1, col).ColumnWidth *= 1.
Next
Run Code Online (Sandbox Code Playgroud)
在C#中
ws.UsedRange.Columns.AutoFit()
for (int col = 0; col < ws.UsedRange.ColumnCount; col++)
ws.Cells[1, col].ColumnWidth *= 1.15;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4167 次 |
| 最近记录: |