下面是我需要处理一些excel的需求,用什么api实现比较好(比如python)? 请问下面的需求,用什么api什么包好? 以及每个需求用什么函数,以及函数的处理样例? 需求1(步骤一): 对5个Excel表的所有sheet页,剪切表格第6到10列(从第三行开始),空数据的行不能剪切,放到第1列到5列,从第1列到5列没有数据那一行开始放。 举个例子就是把下面的红色数据,放到绿色数据下面: "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241225/e261b2ec8e7ad44a06c7db79d28593d7.png) 需求2(步骤2): 1. 在每个sheet中前面插入一列,填入当前表格的名字 2. 在每个sheet中前面插入一列,填入当前sheet的名字 原始数据: "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241225/f24f07dce2c0ddd4283d6c1157b8b16c.png) 处理后,大概就是变成下面这个样子: "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241225/a76c1761216269488c7a78e71bccbec3.png) 需求3(步骤三): 把上面所有sheet汇总到一张表里: "a76c1761216269488c7a78e71bccbec3_bVc9MR4.webp" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241225/a900e2f247fd35060e4db34ec7b629ef.png)
xlsx 文件导出文件怎么设置所有的单元格 左对齐 // 成本分析数据导出 const exportcbDetaildata = () => { const data = [ ['类别', '计划工作量', '占比', '实际工作量', '占比', '利润'], arraylist1, arraylist2, arraylist3, arraylist4, arraylist5, arraylist6, arraylist7, arraylist9,arraylist8 ]; const wb = XLSX.utils.book_new(); const ws = XLSX.utils.aoa_to_sheet(data); // 设置单元格样式为左对齐 // 设置单元格样式 // ws['A1'].s = { // alignment: { // horizontal: 'left', // vertical: 'top', // }, // }; // // 通过循环设置其他单元格的左对齐 // for (let row = 1; row <= data.length; row++) { // for (let col = 1; col <= data[0].length; col++) { // const cellRef = XLSX.utils.encode_cell({ c: col - 1, r: row - 1 }); // if (!ws[cellRef]) ws[cellRef] = {}; // ws[cellRef].s = ws['A1'].s; // } // } // 设置单元格的样式 // 将工作表添加到工作簿 ws["!cols"] = [//设置每一列的宽度 { wch:10 }, { wch: 10 }, { wch: 10 }, { wch: 10 }, { wch: 10 }, { wch: 10 }, ] console.log('最新的数据看看', data, ws) XLSX.utils.book_append_sheet(wb, ws, 'Sheet1'); XLSX.writeFile(wb, '成本分析.xlsx'); };
背景: 日常工作中,经常会有下载excel模板和导出excel数据的需求。 xlsx是由SheetJS开发的一个处理excel文件的npm库,但是同时会有下载、导出的excel表的样式比较粗糙的问题 比如下载模板 import * as XLSX from 'xlsx'; const handleDownloadTemplate = () => { let book = XLSX.utils.book_new(); // 实例化一个Sheet let sheet = XLSX.utils.json_to_sheet( [ { '姓名1111111199999': '', '年龄8888888': '', '身高': '' }, ], { header: [ '姓名', '年龄', '身高' ], }, ); // 将Sheet写入工作簿 XLSX.utils.book_append_sheet(book, sheet, 'Sheet1'); // 写入文件,直接触发浏览器的下载 XLSX.writeFile(book, 'xxxx模板.xlsx'); } 下载出来的表格比较粗糙 "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241008/602488991700576d20b3a821dc57e947.png) 主要有以下问题: 1. 单元格的宽度太小,文字展示不全; 2. 如果对下载的excel有定制化的一些样式需求,就不支持了。 所以,有没有什么好的方案:前端下载、导出的excel表可以定制化。 尝试: 目前没有找到更加好的方案。
xlsx解析excel数据,解析出来的列名和在表格中看到的不同,这是怎么做到的?需要在excel中做格外的设置吗? 下面是一段从excel中提取数据的代码 export default { props: { beforeUpload: Function, // eslint-disable-line onSuccess: Function// eslint-disable-line }, data() { return { loading: false, excelData: { header: null, results: null } } }, methods: { generateData({header, results}) { this.excelData.header = header this.excelData.results = results this.onSuccess && this.onSuccess(this.excelData) }, handleDrop(e) { e.stopPropagation() e.preventDefault() if (this.loading) return const files = e.dataTransfer.files if (files.length !== 1) { this.$message.error('Only support uploading one file!') return } const rawFile = files[0] // only use files[0] if (!this.isExcel(rawFile)) { this.$message.error('Only supports upload .xlsx, .xls, .csv suffix files') return false } this.upload(rawFile) e.stopPropagation() e.preventDefault() }, handleDragover(e) { e.stopPropagation() e.preventDefault() e.dataTransfer.dropEffect = 'copy' }, handleUpload() { this.$refs['excel-upload-input'].click() }, handleClick(e) { const files = e.target.files const rawFile = files[0] // only use files[0] if (!rawFile) return this.upload(rawFile) }, upload(rawFile) { this.$refs['excel-upload-input'].value = null // fix can't select the same excel if (!this.beforeUpload) { this.readerData(rawFile) return } const before = this.beforeUpload(rawFile) if (before) { this.readerData(rawFile) } }, readerData(rawFile) { this.loading = true return new Promise(resolve => { const reader = new FileReader() reader.onload = e => { const data = e.target.result const workbook = XLSX.read(data, {type: 'array'}) const firstSheetName = workbook.SheetNames[0] const worksheet = workbook.Sheets[firstSheetName] const header = this.getHeaderRow(worksheet) console.log("headers: ", header) const results = XLSX.utils.sheet_to_json(worksheet).filter((val, index) => { return index !== 0; })//干掉第一条 this.generateData({header, results}) this.loading = false resolve() } reader.readAsArrayBuffer(rawFile) }) }, getHeaderRow(sheet) { const headers = [] const range = XLSX.utils.decode_range(sheet['!ref']) let C const R = range.s.r /* start in the first row */ for (C = range.s.c; C 解析这样的excel "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20240921/f07d40d23dea777487374f3a6159921d.png) 打印"this.excelData.results"。这里的"dwmc"..是从哪来的?我猜测应该是在excel中设置的。其中的"__EMPTY"..是我在原本的excel上自己添加的列表解析得到的结果。 "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20240921/a23a2761296dfbe0206e0afc5ffd59f2.png)
怎么用java将 xlsx文件 转换成 csv 格式 我想通过java后台将一个xlsx格式的文件转为csv文件,并且可以导出,有推荐的工具或方案吗? 如果有代码示例就更好了