为什么NPOI导出Excel的列宽,设置不出来?
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);//使用工作簿进行写入