当前位置: 首页 > article >正文

Vue3+Typescript+Axios+.NetCore实现导出Excel文件功能

前端代码

//导出Excel
const exportMaintenanceOrderSettlementItemExcelClick = async () => {
  

  let url = `${VITE_APP_API_URL}/api/app/maintenance/settlement-service-item/${currentMaintenanceOrderId.value}/${currentMaintenanceOrderSettlementRow.value.id}`;
  let fileName = `${currentMaintenanceOrder.value.title} ${currentMaintenanceOrderSettlementRow.value.nYearAndMonth} 第【${currentMaintenanceOrderSettlementRow.value.payNum}】期结算服务清单.xlsx`;

  let tokenData = getToken();
  var xhr = new XMLHttpRequest();
  xhr.open("get", url, true); // get、post都可
  xhr.responseType = "blob"; // 转换流
  xhr.setRequestHeader("Authorization", formatToken(tokenData.accessToken)); // token键值对
  xhr.onload = function () {
    if (this.status == 200) {
      var blob = this.response;
      var a = document.createElement("a");
      var url = window.URL.createObjectURL(blob);
      a.href = url;
      a.download = fileName; // 文件名
    }
    a.click();
    window.URL.revokeObjectURL(url);
    exportLoading.value = false;
  };
  xhr.send();
};

后端代码

在后端建一个控制器,控制器方法代码如下:

using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
/// <summary>
/// 导出结算服务项
/// </summary>
/// <param name="maintenanceOrderId"></param>
/// <param name="maintenanceOrderSettlementId"></param>
/// <returns></returns>
[HttpGet]
[Route("settlement-service-item/{maintenanceOrderId}/{maintenanceOrderSettlementId}")]
public async Task<FileResult> ExportMaintenanceOrderSettlementServiceItemsExcelAsync(Guid maintenanceOrderId, Guid maintenanceOrderSettlementId)
{
   var title = $"{maintenanceOrderSettlementId}.xlsx";
   var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";//octet-stream
   var workbook = await _maintenanceOrderServiceItemAppService.GetExportMaintenanceOrderSettlementServiceItemsExcelAsync(maintenanceOrderId, maintenanceOrderSettlementId);


   var bytes = workbook.ConvertToBytes();

   if (bytes != null)
   {
      // 设置响应头
      var cd = new System.Net.Mime.ContentDisposition
      {
         Inline = false,
         FileName = $"{title}", // 指定下载的文件名
         CreationDate = DateTime.Now
      };
      // 添加必须的响应头
      Response.ContentType = contentType;
      Response.Headers.Add("Content-Disposition", cd.ToString());

      // 返回文件流
      return File(bytes, contentType,title,true);

   }


   return null;

}


http://www.kler.cn/a/413881.html

相关文章:

  • 【鸿蒙】鸿蒙开发过程中this指向问题
  • 【5】STM32·FreeRTOS·临界段保护与调度器挂起
  • Unity3D 截图
  • 40分钟学 Go 语言高并发实战:高性能缓存组件开发
  • ViSTa:一个包含4000多个视频和逐步描述的层次化数据集,用于评估VLMs在不同复杂性任务中的表现。
  • [UUCTF 2022 新生赛]ez_rce
  • 并行区块链全解:执行原理、代表项目及技术发展周期
  • 深度学习:自然语言处理
  • JS-06-事件监听
  • MongoDB的SQL注入测试方法
  • ubuntu上安装redis
  • 【C++】7000字介绍map容器和set容器的功能和使用
  • Virtio on Linux
  • css:项目
  • PHP 常量
  • 云计算之kubernetes面试题
  • 基于spring boot开发的理财管理系统设计
  • 算法训练营day16(二叉树03:最大深度,最小深度,完全二叉树节点数量)
  • 湖北移动,以5G-A规模商用“换”出内需新活力
  • SSH远程命令实践:如何打包、压缩并传输服务器文件
  • shell-函数调用进阶即重定向
  • 租辆酷车小程序开发(二)—— 接入微服务GRPC
  • PHP获取安卓APK文件的信息(名称、版本、图标文件等)
  • 科技“加码”编织智能防护网,中威电子助力智慧林业建设
  • 构建与计算:使用递归实现表达式的二叉树解析器
  • [NeurIPS 2022] Leveraging Inter-Layer Dependency for Post-Training Quantization