为什么NPOI导出Excel的列宽,设置不出来?

chauncy_win 2021-02-22 11:17:40
if (startRow < 0) startRow = 0;//行如果小于0,默认设置为0
var wb = new XSSFWorkbook();//使用这个对象来创建工作簿 变量
var sheet = wb.CreateSheet(sheetName);//使用这个对象来创建工作表 变量
//定义单元格
ICell cell;
int j;
var maxLength = 0;//最大行数
int curLenth;//当前行
object columnValue;//列的值
var dt = dt2.Tables[0];//dt变量,用来存储导入的数据
var row = sheet.CreateRow(0);//创建表头
row.HeightInPoints = 25;//行的高度

sheet.SetColumnWidth(0, 10 * 256);//列宽设置了没用


for (int i = 0; i < dt.Columns.Count; i++)//遍历要导入的数据
{
columnValue = dt.Columns[i].ColumnName;//设置遍历到的列 列名
curLenth = Encoding.Default.GetByteCount(columnValue.ToString());//对列 名进行编码
maxLength = (maxLength < curLenth ? curLenth : maxLength);//指定最大长度,如果最大长度小于当前长度,那么返回当前长度,否则返回最大的
var columnWidth = 256 * maxLength;//设置列的宽度
sheet.SetColumnWidth(i, columnWidth);//设置宽度
cell = row.CreateCell(i);//为列创建单元格
cell.SetCellValue(columnValue.ToString()); //设置单元格的内容,就是读取到的列的名称

}

//填充每一行数据
for (var i = startRow; i < dt2.Tables[0].Rows.Count; i++)
{
var dr = dt2.Tables[0].Rows[i];
row = sheet.CreateRow(i + 1);
for (j = 0; j < dt.Columns.Count; j++)
{

columnValue = dr[j];
curLenth = Encoding.Default.GetByteCount(columnValue.ToString());//对列 名进行编码
maxLength = (maxLength < curLenth ? curLenth : maxLength);//指定最大长度,如果最大长度小于当前长度,那么返回当前长度,否则返回最大的
var columnWidth = 256 * maxLength;//设置列的宽度
sheet.SetColumnWidth(j, columnWidth);//设置宽度
cell = row.CreateCell(j);//为列创建单元格
cell.SetCellValue(columnValue.ToString()); //设置单元格的内容,就是读取到的列的名称
}

}
//创建一个数据流对象 指定保存文件的名称,如果没有的话,可以创建
using (var fs = new System.IO.FileStream(saveFileName, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write))
wb.Write(fs);//使用工作簿进行写入
...全文
249 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧