mirror of
https://github.com/veops/cmdb.git
synced 2025-08-28 15:38:39 +08:00
前后端全面升级
This commit is contained in:
75
cmdb-ui/src/utils/download.js
Normal file
75
cmdb-ui/src/utils/download.js
Normal file
@@ -0,0 +1,75 @@
|
||||
import moment from 'moment'
|
||||
import XLSX from 'xlsx'
|
||||
import XLSXS from 'xlsx-js-style'
|
||||
|
||||
export const downloadTxt = ({ text, title }) => {
|
||||
const dom = document.createElement('a')
|
||||
dom.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text))
|
||||
dom.setAttribute('download', `${title}.txt`)
|
||||
if (document.createEvent) {
|
||||
var event = document.createEvent('MouseEvents')
|
||||
event.initEvent('click', true, true)
|
||||
dom.dispatchEvent(event)
|
||||
} else {
|
||||
dom.click()
|
||||
}
|
||||
}
|
||||
|
||||
export const downloadExcel = (data, fileName = `${moment().format('YYYY-MM-DD HH:mm:ss')}.xls`) => {
|
||||
// STEP 1: Create a new workbook
|
||||
const wb = XLSXS.utils.book_new()
|
||||
// STEP 2: Create data rows and styles
|
||||
const rowArray = data
|
||||
// STEP 3: Create worksheet with rows; Add worksheet to workbook
|
||||
const ws = XLSXS.utils.aoa_to_sheet(rowArray)
|
||||
XLSXS.utils.book_append_sheet(wb, ws, fileName)
|
||||
|
||||
let maxColumnNumber = 1 // 默认最大列数
|
||||
rowArray.forEach(item => { if (item.length > maxColumnNumber) { maxColumnNumber = item.length } })
|
||||
// 合并 #将第一行标题列合并
|
||||
// const merges = ['A1:' + String.fromCharCode(64 + parseInt(maxColumnNumber)) + '1']
|
||||
const merges = ['A1:' + createCellPos(maxColumnNumber - 1) + '1']
|
||||
const wsMerge = []
|
||||
merges.map((item) => {
|
||||
wsMerge.push(
|
||||
XLSXS.utils.decode_range(item)
|
||||
)
|
||||
})
|
||||
|
||||
ws['!merges'] = wsMerge
|
||||
|
||||
// 添加列宽
|
||||
ws['!cols'] = (rowArray[1].map(item => {
|
||||
return { width: 22 }
|
||||
}))
|
||||
// 添加行高
|
||||
ws['!rows'] = [{ 'hpt': 80 }]
|
||||
// STEP 4: Write Excel file to browser #导出
|
||||
XLSXS.writeFile(wb, fileName + '.xlsx')
|
||||
}
|
||||
|
||||
export const excel2Array = (fileObj) => {
|
||||
return new Promise(function (resolve) {
|
||||
const reader = new FileReader()
|
||||
reader.readAsBinaryString(fileObj)
|
||||
reader.onload = function (e) {
|
||||
const data = e.target.result
|
||||
const workbook = XLSX.read(data, { type: 'binary' })
|
||||
const sheet = workbook.Sheets[workbook.SheetNames[0]]
|
||||
const lt = XLSX.utils.sheet_to_json(sheet, { header: 1 })
|
||||
resolve(lt)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
export const createCellPos = (n) => {
|
||||
const ordA = 'A'.charCodeAt(0)
|
||||
const ordZ = 'Z'.charCodeAt(0)
|
||||
const len = ordZ - ordA + 1
|
||||
let s = ''
|
||||
while (n >= 0) {
|
||||
s = String.fromCharCode(n % len + ordA) + s
|
||||
n = Math.floor(n / len) - 1
|
||||
}
|
||||
return s
|
||||
}
|
Reference in New Issue
Block a user