实现移动端excel的创建,有以下几个难题要解决:
1 文件的读取和写入. 可以借助HTML5 的File()对象解决, 如果只是保存的话可以讲生成好的xlsx文件序列化后通过模拟下载另存为的方式存储到本地.
2 excel文件的编制. 纯浏览器环境下借助已有的外部库,可以实现简单的excel生成,比如https://npm.taobao.org/package/xlsx 这个库就是支持纯浏览器环境的.
ActiveX借助了PC端Office的能力实现excel的读写,移动端这些都得自己实现,复杂很多.
var tableRes = []//导出的excelexcel表格字符串var bodyList = []//主体
var num = 1//序号
var excelHead = []//excel表头
var resData = []//接口返回的列表
resData.map( (item,index)=>{
let tableRow = []
let count = num++
let obj = {}
obj["numberList"]= count//序号
obj["factorycode"] = item.factorycode//车间编号
obj["equipmentcode"]= item.equipmentcode//设备编号
obj["status"]= item.status//状态
})
tableRes.unshift(excelHead)//添加表头
excelHead =[];//清空表头
=========================================================
function sheet2blob(sheet, sheetName) {
sheetName = sheetName || 'sheet1'
var workbook = {
SheetNames: [sheetName],
Sheets: {}
}
workbook.Sheets[sheetName] = sheet
// 生成excel的配置项
var wopts = {
bookType: 'xlsx', // 要生成的文件类
bookSST: false, // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
type: 'binary'
}
var wbout = XLSX.write(workbook, wopts)
var blob = new Blob([s2ab(wbout)], {type:"application/octet-stream"})
// 字符串转ArrayBuffer
function s2ab(s) {
var buf = new ArrayBuffer(s.length)
var view = new Uint8Array(buf)
for (var i=0i!=s.length++i) view[i] = s.charCodeAt(i) &0xFF
return buf
}
return blob
}
function openDownloadDialog(url, saveName){
if(typeof url == 'object' &&url instanceof Blob){
url = URL.createObjectURL(url)// 创建blob地址
}
var aLink = document.createElement('a')
aLink.href = url
aLink.download = saveName || ''// HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效
var event
if(window.MouseEvent) event = new MouseEvent('click')
else{
event = document.createEvent('MouseEvents')
event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
}
aLink.dispatchEvent(event)
}
function exportExcel(tableInfo){
// var tableInfo = [
// ['主要信息', null, null, '其它信息'], // 特别注意合并的地方后面预留2个null
// ['姓名', '性别', '年龄', '注册时间'],
// ['张三', '男', 18, new Date()],
// ['李四', '女', 22, new Date()]
// ]
// tableInfo = ""
var sheet = XLSX.utils.aoa_to_sheet(tableInfo)
sheet["!cols"] = [
{ wch: 8 },//宽度
{ wch: 15 },
{ wch: 15 },
{ wch: 15 },
{ wch: 15 },
{ wch: 15 },
{ wch: 15 },
{ wch: 15 },
{ wch: 20 },
{ wch: 20 },
]
// sheet['!merges'] = [
// // 设置A1-C1的单元格合并
// {s: {r: 0, c: 0}, e: {r: 0, c: 2}}
// ]
openDownloadDialog(sheet2blob(sheet), '车间订单列表.xlsx')
}
exportExcel(tableRes)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)