广州网站建设 美词,山东省品牌建设促进会网站,wordpress上传到又拍云,wordpress 如何修改主题中元素目录
问题现象
原因分析
范例运行环境
解决问题
生成测试文本
实现自适应
小结 问题现象
通过 COM 操作 Excel 自动适应列宽的方法是 AutoFit 方法#xff0c;该方法适于自动适应列宽或行高。
最近在我们的一款应用里发现效果并没有符合预期#xff0c;我们提供了一…目录
问题现象
原因分析
范例运行环境
解决问题
生成测试文本
实现自适应
小结 问题现象
通过 COM 操作 Excel 自动适应列宽的方法是 AutoFit 方法该方法适于自动适应列宽或行高。
最近在我们的一款应用里发现效果并没有符合预期我们提供了一个可以设置导出Excel花名册的配置功能如下图 通过查询配置表可以看到当选择需要输出的列的时候可以设置 excel 列的宽度以满足输出样式。列宽的值可以设置0到255的数值在 C# 中列宽ColumnWidth是一个 dynamic 类型如下示例代码
Range _rangeexcel.Range[excel.Cells[1,1],excel.Cells[65536,1]];_range.ColumnWidth255;
通过获取 Range 对象将其 ColumnWidth 设置为我们配置的值。在我们的应用里如果配置为 -1 则表示使用自动适应列宽模式这就用到了如下代码
Range _rangeexcel.Range[excel.Cells[1,1],excel.Cells[65536,1]];if(config_width-1){_range.Columns.AutoFit();
}
我们在应用里配置了类似“家庭成员情况”、“主要社会关系人” 、“学习经历”、“工作经历” 等履历型的多行文本输出使用了自动适应列宽模式输出效果如下 实际上是我们想要得到这样的效果 原因分析
根据输出效果我们在 Excel 里模拟操作一下自适应列宽将鼠标移动到指定的列的表头的分隔线处鼠标形状会显示为左右箭头分隔状然后双击即可实现自动列宽。 发现有以下几种情况
1如果单元格未设置为自动换行我们将列宽手动调小于文字显示的长度双击后将成功自动适应为最大文字长度的合适列宽。
2如果单元格设置为自动换行我们将列宽手动调小于文字显示的长度双击后将没有达成预期的显示列宽。
3如果单元格设置为自动换行我们将列宽手动调大于多行文字显示的长度双击后将成功自动适应为最大文字长度的合适列宽。
因此我们可以使用 C# 模拟情况3的操作来解决情况2的问题。 范例运行环境
操作系统 Windows Server 2019 DataCenter
.net版本 .netFramework4.0 或以上
Office Excel 2016
开发工具VS2019 C#
解决问题
生成测试文本
我们假设生成了如下 HtmlTable 表格内容
姓名与本人关系政治面目工作单位职务姓名1父亲 群众工作单位工作单位工人姓名2母亲群众工作单位2员工姓名3子女群众无工作单位无
我们通过遍历行列的方法计算每个单元格相对于列的最大字节数 GetByteCount不是长度Length示例代码如下 for (int i 0; i mtable.Rows[0].Cells.Count; i){int maxlen 0;for (int j 0; j mtable.Rows.Count; j){HtmlTableCell curcellmtable.Rows[j].Cells[i];int curlenSystem.Text.Encoding.Default.GetByteCount(curcell.InnerText);if (curlen maxlen){maxlen curlen;}}mtable.Rows[0].Cells[i].Attributes[maxlen] maxlen.ToString();}string excel ;for (int i 0; i mtable.Rows.Count; i){for (int j 0; j mtable.Rows[i].Cells.Count; j){int maxlen int.Parse(mtable.Rows[0].Cells[j].Attributes[maxlen]);HtmlTableCell curcell mtable.Rows[i].Cells[j];excel curcell.InnerText string.Concat(Enumerable.Repeat( , maxlen - System.Text.Encoding.Default.GetByteCount(curcell.InnerText))) ;
curcell.InnerText);}excel \r\n;}实现自适应
通过生成测试文本保存到数据库并输出到 Excel 指定列实现自适应非常简单将列值设置为最大值再使用自适应AutoFit 方法即可以让 Excel 自动计算并重新调整列宽代码如下 Range _rangeexcel.Range[excel.Cells[1,1],excel.Cells[65536,1]];if(config_width-1){_range.ColumnWidth 255;_range.Columns.AutoFit();
}
自此完美解决。 小结
关于 AutoFit 方法的更多参考请访问如下链接
https://learn.microsoft.com/zh-cn/office/vba/api/excel.autofit?sourcerecommendations
本文代码仅供您参考使用感谢您的阅读希望本文能够对您有所帮助。