岄. 2023-09-20 17:15 采纳率: 91.7%
浏览 51
已结题

在uniapp中我使用了exceljs库导出excel表,我在电脑pc端直接点击按钮生成excel表,但是在手机app中我点击按钮下载,只弹出一个弹框询问是否下载,也没下载什么东西

在uniapp中我使用了exceljs库导出excel表,我在电脑pc端直接点击按钮生成excel表,也可以打开,但是在手机app中我点击按钮下载,只弹出一个弹框询问是否下载,我点了下载之后,又没有反应,也没下载什么东西

exportExcel22(data) {
                const workbook = new ExcelJS.Workbook()
                const worksheet = workbook.addWorksheet('Sheet 1')

                // 设置标题样式
                const titleStyle = {
                    font: {
                        bold: true
                    },
                    alignment: {
                        vertical: 'middle',
                        horizontal: 'center'
                    },
                    border: {

                        bottom: {
                            style: 'none'
                        },
                    },
                };

                // 添加标题并设置样式
                worksheet.mergeCells('A2:E2');
                worksheet.getCell('A2').value = '库存数量表';
                worksheet.getCell('A2').style = titleStyle;

                // 添加数据并设置样式
                data.forEach((item, index) => {
                    const row = 6 + index; // 从第五行开始添加数据
                    worksheet.getCell(`A${row}`).value = item.whdt_zbgno;
                    worksheet.getCell(`B${row}`).value = item.whdt_stno;
                    worksheet.getCell(`C${row}`).value = item.whdt_zbno;
                    worksheet.getCell(`D${row}`).value = item.whdt_zbna;
                    worksheet.getCell(`E${row}`).value = item.whdt_num;
                    // 添加表头
                    worksheet.getCell('A5').value = '房编号';
                    worksheet.getCell('B5').value = '位编号';
                    worksheet.getCell('C5').value = '编号';
                    worksheet.getCell('D5').value = '名称';
                    worksheet.getCell('E5').value = '数量';
                    // 设置边框样式
                    const borderStyle = {
                        top: {
                            style: 'thin'
                        },
                        right: {
                            style: 'thin'
                        },
                        bottom: {
                            style: 'thin'
                        },
                        left: {
                            style: 'thin'
                        },
                    };
                    //表头样式
                    worksheet.getCell('A5').border = borderStyle;
                    worksheet.getCell('B5').border = borderStyle;
                    worksheet.getCell('C5').border = borderStyle;
                    worksheet.getCell('D5').border = borderStyle;
                    worksheet.getCell('E5').border = borderStyle;
                    //内容
                    worksheet.getCell(`A${row}`).border = borderStyle;
                    worksheet.getCell(`B${row}`).border = borderStyle;
                    worksheet.getCell(`C${row}`).border = borderStyle;
                    worksheet.getCell(`D${row}`).border = borderStyle;
                    worksheet.getCell(`E${row}`).border = borderStyle;
                });

                // 设置所有单元格居中
                worksheet.eachRow(row => {
                    row.eachCell(cell => {
                        cell.alignment = {
                            vertical: 'middle',
                            horizontal: 'center'
                        };
                    });
                });
                // 导出Excel文件
                workbook.xlsx.writeBuffer().then((buffer) => {
                    const blob = new Blob([buffer], {
                        type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
                    });
                    const url = URL.createObjectURL(blob);

                    // 创建一个<a>标签并设置下载链接
                    const link = document.createElement('a');
                    link.href = url;
                    link.setAttribute('download', '数量表.xlsx');

                    // 触发点击事件进行下载
                    link.click();

                    // 释放URL对象
                    URL.revokeObjectURL(url);
                });

            },
            //生成excel表
            exportExcel() {
                if (this.searchResults.length == 0) {
                    if (this.list1.length == 0) {
                        uni.showToast({
                            title: '请进行筛选',
                            icon: 'error'
                        })
                    } else {
                        this.exportExcel22(this.list1)    
                                        }

                } else {
                    this.exportExcel22(this.searchResults)
                }
            },

  • 写回答

3条回答 默认 最新

  • 岄. 2023-10-08 15:19
    关注
    在uniapp中使用exceljs库导出excel表,并在安卓手机APP中下载并保存到手机本地,可以按照以下步骤实现:
    
    1. 在uniapp项目中安装exceljs库。在项目根目录下执行以下命令:
    
    ```bash
    npm install exceljs
    
    1. 在uniapp项目中创建一个H5页面,用于导出excel表。

    2. 在H5页面中引入exceljs库,并编写导出excel的代码。例如:

    import ExcelJS from 'exceljs';
    
    export default {
      methods: {
        async exportExcel() {
          const workbook = new ExcelJS.Workbook();
          const worksheet = workbook.addWorksheet('Sheet');
    
          worksheet.getCell('A1').value = 'Hello World!';
    
          const buffer = await workbook.xlsx.writeBuffer();
          const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
    
          // 创建下载链接并自动点击下载
          const link = document.createElement('a');
          link.href = window.URL.createObjectURL(blob);
          link.download = 'example.xlsx';
          link.click();
          window.URL.revokeObjectURL(link.href);
        }
      }
    }
    
    1. 在Android手机APP中,使用WebView组件加载该H5页面,当点击导出按钮时,调用WebView的evaluateJavaScript方法执行导出excel的方法。
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    
    public class MainActivity extends AppCompatActivity {
    
        private WebView webView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            webView = findViewById(R.id.webView);
            webView.getSettings().setJavaScriptEnabled(true);
            webView.setWebViewClient(new WebViewClient());
    
            webView.loadUrl("http://your-h5-page-url");
    
            // 当WebView加载完成后,注册JavaScript接口
            webView.setWebViewClient(new WebViewClient() {
                @Override
                public void onPageFinished(WebView view, String url) {
                    super.onPageFinished(view, url);
                    
                    // 注册JavaScript接口
                    webView.addJavascriptInterface(new JavaScriptInterface(), "jsInterface");
                }
            });
        }
    
        private class JavaScriptInterface {
            @JavascriptInterface
            public void exportExcel() {
                // 在这里调用Android的保存文件方法,将excel保存到本地
            }
        }
    }
    
    1. 在上述的exportExcel方法中,调用Android的保存文件方法,将excel保存到本地。可以参考以下代码:
    private class JavaScriptInterface {
        @JavascriptInterface
        public void exportExcel() {
            webView.post(new Runnable() {
                @Override
                public void run() {
                    try {
                        File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "example.xlsx");
                        FileOutputStream outputStream = new FileOutputStream(file);
    
                        // 获取H5页面中的excel内容,并写入到文件中
                        webView.evaluateJavascript("jsFunctionToGetExcelContent()", new ValueCallback<String>() {
                            @Override
                            public void onReceiveValue(String value) {
                                try {
                                    outputStream.write(value.getBytes());
                                    outputStream.close();
                                    Toast.makeText(MainActivity.this, "保存成功", Toast.LENGTH_SHORT).show();
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }
                            }
                        });
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    }
    

    这样,在H5页面中点击导出按钮后,会调用Android的保存文件方法,将excel保存到安卓手机APP的本地存储中。请根据实际情况修改文件保存的路径和文件名。

    ```

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月30日
  • 创建了问题 9月20日

悬赏问题

  • ¥15 软件供应链安全是跟可靠性有关还是跟安全性有关?
  • ¥15 电脑蓝屏logfilessrtsrttrail问题
  • ¥20 关于wordpress建站遇到的问题!(语言-php)(相关搜索:云服务器)
  • ¥15 【求职】怎么找到一个周围人素质都很高不会欺负他人,并且未来月薪能够达到一万以上(技术岗)的工作?希望可以收到写有具体,可靠,已经实践过了的路径的回答?
  • ¥15 Java+vue部署版本反编译
  • ¥100 对反编译和ai熟悉的开发者。
  • ¥15 带序列特征的多输出预测模型
  • ¥15 Python 如何安装 distutils模块
  • ¥15 关于#网络#的问题:网络是从楼上引一根网线下来,接了2台傻瓜交换机,也更换了ip还是不行
  • ¥15 资源泄露软件闪退怎么解决?