js导出excel,并保留特定的样式

客户要求了导出excel的样式,去网上找了很多办法,最终还是觉得这个办法最靠谱。

原理是office文档可以导出成html,那自然也可以打开内容是html的文档。

创建一份html文档,下载时,后缀以.xls结尾。

以这种方式下载的下载的excel优点是可以随意设置样式,其他以json导出的excel表很多都不能设置样式。

缺点也比较明显,就是打开时会提示,文件格式与后缀不匹配,是否仍要打开,选择是即可。

贴上源码,小编用的vuecli,this指向的变量需要各位看官自行添加。

        beginDown(title){
            let wh='height:41px;width:139px;line-height:41px;';
            let tac="text-align:center;";
            let bold="font-weight:bold;";
            let sty=' style="'+wh+'"';
            let uri = 'data:application/vnd.ms-excel;base64,';
            title=title || '快餐部日查询表';
            let mains='',cost=0,count=0;
            this.menu.map(val=>{
                count=((val.payByCash+val.payByCard+val.payByWx)*100).toFixed(0)/100
                mains+=`
                    <tr>
                        <td style='${wh+tac}'>${val.name}</td>
                        <td style='${wh+tac}'>${val.payByCash || 0}</td>
                        <td style='${wh+tac}'>${val.payByCard || 0}</td>
                        <td style='${wh+tac}'>${val.payByWx || 0}</td>
                        <td style='${wh+tac}'>${ count || 0}</td>
                    </tr>
                `
                cost+=count
            })
            let template = `
			<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40">
			<head>
				<meta charset="utf-8">
			</head>
			<body>
                <table border=1 style="font-family: "宋体";">
                    <tr>
                        <td colspan='5' style='${wh+tac+bold}'>${title}</td>
                    </tr>
                    <tr>
                        <td colspan='5' ${sty}>日期:${this.begin} 00:00:00 至 ${this.end} 00:00:00</td>
                    </tr>
                    <tr>
                        <td style='${wh+tac}'>餐别</td>
                        <td style='${wh+tac}'>现金</td>
                        <td style='${wh+tac}'>微信</td>
                        <td style='${wh+tac}'>一卡通</td>
                        <td style='${wh+tac}'>合计</td>
                    </tr>
                    ${mains}
                    <tr>
                        <td ${sty}>总计大写:</td>
                        <td ${sty} colspan='4'>${this.changeNumMoneyToChinese(cost)}</td>
                    </tr>
                    <tr>
                        <td ${sty}>总计小写:</td>
                        <td ${sty} colspan='4' style='text-align:left;'>${cost}</td>
                    </tr>
                    <tr></tr>
                    <tr>
                        <td ${sty+tac}>收银员:${this.operator}</td>
                        <td ${sty+tac}>出纳:</td>
                        <td ${sty+tac}>会计:</td>
                        <td ${sty+tac}>打印时间:</td>
                        <td ${sty+tac} style='text-align:left'>${this.times({date:1,type:'y-m-d h:m:s'})}</td>
                    </tr>
                    <tr>
                        <td ${sty}>备注:</td>
                        <td ${sty} colspan='4'></td>
                    </tr>
                </table>
			</body>
			</html>`;
            var ele=document.createElement('a');
            ele.download=title+'.xls';//下载文件的名字
            ele.href=uri + window.btoa(unescape(encodeURIComponent(template)));
            document.body.appendChild(ele);
            ele.click();
            document.body.removeChild(ele);
        },

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
若要在 Java 中导出 Excel 并合并特定单元格,可以使用 Apache POI 这个开源库。下面是一个简单的示例,将第一行第一列到第一行第四列的单元格合并,并将文本居中。 ```java import java.io.FileOutputStream; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcelExportExample { public static void main(String[] args) { // 创建一个新的工作簿 Workbook workbook = new XSSFWorkbook(); // 创建一个新的工作表 Sheet sheet = workbook.createSheet("Sheet1"); // 创建一行,行号为 0 Row row = sheet.createRow(0); // 创建第一个单元格,单元格位置为 (0, 0) Cell cell1 = row.createCell(0); cell1.setCellValue("合并单元格示例"); // 创建第一行第一列到第一行第四列的单元格,并合并它们 CellRangeAddress region = new CellRangeAddress(0, 0, 0, 3); sheet.addMergedRegion(region); // 设置合并后的单元格的样式 CellStyle style = workbook.createCellStyle(); style.setAlignment(HorizontalAlignment.CENTER); style.setVerticalAlignment(VerticalAlignment.CENTER); cell1.setCellStyle(style); // 将工作簿写入文件 try { FileOutputStream outputStream = new FileOutputStream("example.xlsx"); workbook.write(outputStream); workbook.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 上面的代码首先创建了一个新的工作簿和工作表,然后创建了一行和第一个单元格,并将其设置为合并单元格。接着,创建了一个单元格样式,并将其应用于合并后的单元格。最后,将工作簿写入文件。 注意:上面的代码使用了 XSSFWorkbook 类,这是一个适用于 Excel 2007 及以上版本的类。如果要导出 Excel 2003 及以下版本的文件,需要使用 HSSFWorkbook 类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值