VUE如何下载表格,自动下载以及让用户选择路径下载(弹窗windows文件夹自动写入资源)

const download = async function () {
  const { code, endTime, startTime, dataType, type, tabValue, timeType } = form
  const params = {
    code,
    endTime,
    startTime,
    dataType,
    type: tabValue === '计算数据' ? null : type[0],
    timeType: timeType[0] === 'all' ? null : timeType[0] <= 2 ? timeType[0] : null
  }
  const res = await queryData(params)
  let downData = []
  let max = 0
  for (const key in res) {
    if (key !== 'columnVO') {
      if (res[key].length > max) {
        max = res[key].length
        downData = res[key]
      }
    }
  }
  const csvContent = convertArrayOfObjectsToCSV(downData)
  let blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' })

  // 将数据转换为工作簿
  const worksheet = XLSX.utils.json_to_sheet(downData);
  const workbook = XLSX.utils.book_new();
  XLSX.utils.book_append_sheet(workbook, worksheet, "Sheet1");

  // 生成二进制字符串并触发下载
  const wbout = XLSX.write(workbook, {bookType:'xlsx', type:'binary'});
   blob = new Blob([s2ab(wbout)], {type:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"});
  const url = URL.createObjectURL(blob);
  const a = document.createElement("a");
  a.href = url;
  a.download = "data.xlsx"; // 设置下载的文件名
  document.body.appendChild(a);
  a.click();
  document.body.removeChild(a);
  URL.revokeObjectURL(url);
  //todo ue下载表格
  console.log('等待ue进行下载操作', blob)
  console.log("拿到的json数据======",res)

  // 自定义写入资源
  try {
    if ('showSaveFilePicker' in window) {
      const handle = await window.showSaveFilePicker();
      const writable = await handle.createWritable();
      await writable.write(blob);
      await writable.close();
      console.log('文件已成功写入');
    } else {
      throw new Error('浏览器不支持 File System Access API');
    }
  } catch (error) {
    console.error('写入文件失败:', error);
  }

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue ,可以使用 `<input type="file" webkitdirectory>` 来选择文件夹,这样用户选择的就是一个文件夹的绝对路径。具体实现方法如下: 首先,在需要弹出选择文件夹的地方,添加一个按钮或者链接,点击后触发选择文件夹的操作。例如: ```html <template> <div> <button @click="selectFolder">选择文件夹</button> </div> </template> ``` 然后,在 `selectFolder` 方法,使用 `input` 元素来实现选择文件夹的操作。具体实现如下: ```html <template> <div> <button @click="selectFolder">选择文件夹</button> <input type="file" webkitdirectory ref="folderInput" style="display:none;" @change="handleFolderSelect"> </div> </template> <script> export default { methods: { selectFolder() { // 弹出选择文件夹对话框 this.$refs.folderInput.click(); }, handleFolderSelect(event) { // 用户选择文件夹后的回调函数 const folderPath = event.target.files[0].path; console.log('用户选择文件夹路径:', folderPath); // TODO: 处理用户选择文件夹路径 } } } </script> ``` 这里使用了 `input` 元素来实现选择文件夹的操作,`type="file"` 表示选择文件,`webkitdirectory` 表示选择文件夹,`ref="folderInput"` 表示设置该元素的引用名为 `folderInput`,`@change` 表示选择文件夹后的回调函数。在 `selectFolder` 方法,调用 `this.$refs.folderInput.click()` 来弹出选择文件夹对话框。在 `handleFolderSelect` 方法,通过 `event.target.files[0].path` 获取用户选择文件夹的绝对路径

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值