Have fun with sci.dog

C#数据导出EXCEL的一个策略

最近,开发一个软件,一个需求就是用户的DataGridViews数据导出到excel,比较麻烦的有两点

  • datagridview数据是行,需求要求导出列。
  • 数据要符合模板要求,有一些汉字、名称、单位之类

导出数据,可以采用NOPI组件,nuget安装即可

https://github.com/nissl-lab/npoi

我的思路是,做一个excel文件作为模板,模板excel里有许多sheet,每一个sheet都是一个模板,需要导出数据的时候,将此模板复制到导出路径下,然后删除多余的sheet。

1、将要复制的sheet移动到最前

wb.SetSheetOrder(sheetname, 0);

2、设置当前激活的sheet,这步很重要,负责写入后的excel文件显示损坏

wb.SetActiveSheet(0);

3、删除多余的sheet,这里建议多删除一次,删除次数少了,删不干净。。

for (int i = 0; i < wb.NumberOfSheets+1; i++)
{
   wb.RemoveSheetAt(1);
}

4、写文件

using (FileStream fs = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
    wb.Write(fs);
    fs.Close();
    return true;
 }

没几行代码,但着实折腾了很久。主要是要注意设置激活,删除的时候,多删除几次。

赞(0)
未经允许不得转载:SciDog » C#数据导出EXCEL的一个策略

评论 抢沙发