vuexcel-utils
Version:
Utils for vuexcel
59 lines (49 loc) • 1.8 kB
text/typescript
/**
* 插入到excel中
* @param {Array} data - 插入的数据,必须是一个二纬矩阵
* @param {string} [targetAddress] - 插入数据的位置
* @param {boolean} [exchange] - 是否矩阵交换
* @return {null}
* */
import RequestContext = Excel.RequestContext;
import Range = Excel.Range;
import Worksheet = Excel.Worksheet;
export declare interface Matrix extends Array<Array<any>> {
}
// 增加一个报错抛出
/**
* @param {Matrix} data - 插入的数据
* @param {string} targetAddress - 插入的地址
* */
export default function (data: Matrix, targetAddress: string) {
// 检测是否为空 如果为空则不进行任何操作
// if (data.length === 0 || (data.length === 1 && data[0].length === 0)) return null
let yLength = data.length
let xLength = data[0].length
Excel.run((ctx: RequestContext) => {
let workbook = ctx.workbook
let range: Range
// 预防没有给出address的情况
if (!targetAddress) {
let range: Range = workbook.getSelectedRange()
range.load('address')
} else {
let worksheet: Worksheet = ctx.workbook.worksheets.getActiveWorksheet()
range = worksheet.getRange(targetAddress)
}
range.load('address')
return ctx.sync()
.then(() => {
// 获取sheet 和 address
let [sheet, address] = range.address.split('!')
let targetWorksheet: Worksheet = workbook.worksheets.getItem(sheet)
targetWorksheet.activate()
range = targetWorksheet.getRange(address)
range = range.getCell(0, 0) // 获取最左上角的cell
range = range.getResizedRange(yLength - 1, xLength - 1) // 变换大小为目标矩阵大小
range.select() // 在excel中选中
range.values = data
return ctx.sync()
})
})
}