C# 使用NPOI库导出excel表格

1.Visual Studio 环境中配置安装NPOI库

右击解决方案选择“管理解决方案的NuGet”程序包
在搜索框中搜索NPOI,如果搜索不到结果,需要点击“设置”,勾选“nuget.org”和“Microsoft and NET”选项
完成设置后,在进行搜索,如果还是没有搜索结果,需重复搜索几次,安装即可

  • 引用相关命名空间
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using NPOI.HSSF.UserModel;
using NPOI.SS.Util;

2.HSSFWorkbook与XSSFWorkbook的区别和.xls和.xlsx的区别

xls和.xlsx的区别

1、.xls是2003版Office Microsoft Office Excel 工作表的格式,用03版Office,新建Excel默认保存的Excel文件格式的后缀是.xls;
2、.xlsx是2007版Office Microsoft Office Excel 工作表的格式,用07版Office,新建Excel默认保存的的Excel文件格式后缀是.xlsx。
3、07版的Office Excel,能打开编辑07版(后缀.xlsx)的Excel文件,也能打开编辑03版(后缀.xls)的Excel文件,都不会出现乱码或者卡死的情况。
4、03版的Office Excel,就只能打开编辑03版(后缀.xls)的Excel文件;如果打开编辑07版(后缀.xlsx)的Excel文件,则可能出现乱码或者开始能操作到最后出现卡死。

HSSFWorkbook与XSSFWorkbook的区别

1、NPOI使用HSSFWorkbook类来处理xls,XSSFWorkbook类来处理xlsx,它们都继承接口IWorkbook,因此可以通过IWorkbook来统一处理xls和xlsx格式的文件。
2、我们在到处EXCEL表格时使用HSSFWorkbook类来导出xls,XSSFWorkbook类来导出xlsx;如果用HSSFWorkbook类导出xlsx格式文件可以通过修改文件类型修改为xls,Office才可正常打开,Office打开后可以另存为xlsx格式文件,WPS可以正常打开导出的xlsx格式文件;如果用XSSFWorkbook类导出xls文件,Office可以打开。

注意:
使用NPOI.HSSF.UserModel空间下的HSSFWorkbook操作Excel2003
使用NPOI.XSSF.UserModel空间下的XSSFWorkbook操作Excel2007

3.导出Excel表格代码实践

写出表格方法 WriteExcel

public Task<byte[]> WriteExcel()
        {
			//创建内存流读写
            using var fs = new MemoryStream();
            //创建工作簿
            IWorkbook workbook = new XSSFWorkbook();
            //创建工作表
            ISheet sheet1 = workbook.CreateSheet("统计");

            var rowIndex = 0;
            //合并单元格
            sheet1.AddMergedRegion(new CellRangeAddress(0, 0, 0, 5));
            //创建行
            IRow row = sheet1.CreateRow(rowIndex);
            //创建单元格 第0列 值为:统计(总数:4)
            row.CreateCell(0).SetCellValue("统计(总数:4)");
            rowIndex++;
            row = sheet1.CreateRow(rowIndex);
            var str = new List<string> { "彭于晏", "我", "胡歌"};
            for (int i = 0; i < 3; i++)
            {
                row.CreateCell(i).SetCellValue(str[i]);
            }

            rowIndex++;
            for (int i = 0; i < 2; i++)
            {
                row = sheet1.CreateRow(rowIndex);
                for (int j = 0; j < 3; j++)
                {
                    row.CreateCell(j).SetCellValue("9999");
                }
                rowIndex++;
            }

            rowIndex++;
            sheet1.AddMergedRegion(new CellRangeAddress(rowIndex, rowIndex, 0, 5));
            row = sheet1.CreateRow(rowIndex);
            row.CreateCell(0).SetCellValue("燕子(总数:3)");
            rowIndex++;
            row = sheet1.CreateRow(rowIndex);
            for (int i = 0; i < 3; i++)
            {
                //宽度自适应
                //sheet1.SetColumnWidth();
                row.CreateCell(i).SetCellValue(str[i]);
            }
            rowIndex++;
            for (int i = 0; i < 2; i++)
            {
                row = sheet1.CreateRow(rowIndex);
                for (int j = 0; j < 3; j++)
                {
                    row.CreateCell(j).SetCellValue("999");
                }
                rowIndex++;
            }
            workbook.Write(fs, true);
            return Task.FromResult(fs.ToArray());
        }

在这里插入图片描述

后端service

/// <summary>
/// 导出亚洲燕子统计
/// </summary>
/// <returns></returns>
[HttpPost]
[Route("ExportSwallowStatisticToExcel")]
public async Task<ActionResult> ExportSwallowStatisticToExcelAsync(StatisticInput input)
    {
        ttpContext.Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition");
        var content = await _AppService.WriteExcel();
        var fileName = "统计_" + input.StartDate + "_" + input.EndDate + ".xlsx";
        return File(content, MimeTypes.GetByExtension(Path.GetExtension(fileName)), fileName);
    }

前端导出按钮代码 前端使用的Angular

 //导出
  async export() {
    const url =
      sessionStorage.getItem(AppConsts.ApiUrl) + '/FileDo/ExportSwallowStatisticToExcel';

    const headersParam: { [key: string]: string } = {};
    headersParam['Authorization'] = 'Bearer ' + sessionStorage.getItem('access_token');
    headersParam['accept-language'] = this.sessionStateService.getLanguage();

    const les = this.getSwallowStatisticRequest();
    const ret = await this.http
      .post(url, les, { responseType: 'blob', headers: headersParam })
      .toPromise();

    const blob = new Blob([ret], { type: 'application/vnd.ms-excel' });
    const a = document.createElement('a');
    a.href = URL.createObjectURL(blob);

    const date1 = this.datePipe.transform(this.startData, 'yyyyMMdd');
    const date2 = this.datePipe.transform(this.endData, 'yyyyMMdd');
	//excel文件名字
    a.download = '统计_' + date1 + "_" + date2 + '.xlsx';

    a.click();
  }
  getSwallowStatisticRequest(): StatisticInput {
	const res = {} as StatisticInput;
	//self
	return res;
  }
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用C#和NPOI可以方便地导出Excel表格。下面是一个简单的示例: 1. 首先,你需要安装NPOI,可以使用NuGet包管理器进行安装。 2. 在代码中,首先创建一个工作簿和一个工作表: ``` using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System.IO; ... // 创建一个工作簿 var workbook = new XSSFWorkbook(); // 创建一个工作表 var sheet = workbook.CreateSheet("Sheet1"); ``` 3. 接下来,你可以向表格中添加数据。以下是将数据添加到第一行的示例: ``` // 创建第一行并添加数据 var headerRow = sheet.CreateRow(0); headerRow.CreateCell(0).SetCellValue("ID"); headerRow.CreateCell(1).SetCellValue("Name"); headerRow.CreateCell(2).SetCellValue("Age"); ``` 4. 然后,你可以循环遍历数据并将其添加到表格中。以下是将数据添加到第二行和第三行的示例: ``` // 模拟数据 var data = new List<Person> { new Person { ID = 1, Name = "Alice", Age = 18 }, new Person { ID = 2, Name = "Bob", Age = 20 } }; // 循环遍历数据 for (int i = 0; i < data.Count; i++) { var row = sheet.CreateRow(i + 1); row.CreateCell(0).SetCellValue(data[i].ID); row.CreateCell(1).SetCellValue(data[i].Name); row.CreateCell(2).SetCellValue(data[i].Age); } ``` 5. 最后,将工作簿保存到文件中: ``` // 保存工作簿到文件 using (var fileStream = new FileStream("output.xlsx", FileMode.Create)) { workbook.Write(fileStream); } ``` 完整的代码示例: ``` using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System.Collections.Generic; using System.IO; class Person { public int ID { get; set; } public string Name { get; set; } public int Age { get; set; } } ... // 创建一个工作簿 var workbook = new XSSFWorkbook(); // 创建一个工作表 var sheet = workbook.CreateSheet("Sheet1"); // 创建第一行并添加数据 var headerRow = sheet.CreateRow(0); headerRow.CreateCell(0).SetCellValue("ID"); headerRow.CreateCell(1).SetCellValue("Name"); headerRow.CreateCell(2).SetCellValue("Age"); // 模拟数据 var data = new List<Person> { new Person { ID = 1, Name = "Alice", Age = 18 }, new Person { ID = 2, Name = "Bob", Age = 20 } }; // 循环遍历数据 for (int i = 0; i < data.Count; i++) { var row = sheet.CreateRow(i + 1); row.CreateCell(0).SetCellValue(data[i].ID); row.CreateCell(1).SetCellValue(data[i].Name); row.CreateCell(2).SetCellValue(data[i].Age); } // 保存工作簿到文件 using (var fileStream = new FileStream("output.xlsx", FileMode.Create)) { workbook.Write(fileStream); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一支一支杨桃枝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值