import { utils, write } from 'xlsx'
import Papa from 'papaparse'
function mergeHeader(worksheet, cellList, level = 3) {
const colName = []
for (const key of Object.keys(worksheet)) {
if (key.slice(-1) === '1' && isNaN(Number(key.slice(-2, -1)))) {
colName.push(key.slice(0, -1))
} else {
break
}
}
function getSpaceNumber(dataCopy, rowIndex, colIndex, axle) {
const data = JSON.parse(JSON.stringify(dataCopy))
let count = 0
axle ? (rowIndex += 1) : (colIndex += 1)
count = isSpaceString(data[rowIndex][colIndex], axle, count)
function isSpaceString(value, axle, count) {
if (value === '' && axle && rowIndex < level) {
count += 1
rowIndex += 1
if (rowIndex >= data.length - 1) {
return count
}
return isSpaceString(data[rowIndex][colIndex], axle, count)
} else if (value === '' && !axle && colIndex < colName.length) {
count += 1
colIndex += 1
if (colIndex >= colName.length) {
return count
}
return isSpaceString(data[rowIndex][colIndex], axle, count)
} else {
return count
}
}
return count
}
const merges = []
for (const rowIndex in cellList) {
if (rowIndex > level - 1) {
break
}
const rowCurrnetIndex = Number(rowIndex) + 1
for (const cellIndex in cellList[rowIndex]) {
if (cellIndex > colName.length - 1) {
break
}
if (cellList[rowIndex][cellIndex] !== '') {
const colCurrnetIndex = Number(cellIndex)
let colCount = 0
let rowCount = 0
if (cellList[rowIndex][cellIndex] === '其中:三次分配(奖项/专项)') {
rowCount = getSpaceNumber(cellList, Number(rowIndex), Number(cellIndex), true)
} else {
colCount = getSpaceNumber(cellList, Number(rowIndex), Number(cellIndex), false)
rowCount = getSpaceNumber(cellList, Number(rowIndex), Number(cellIndex), true)
}
if (colCount || rowCount) {
merges.push(
`${colName[colCurrnetIndex]}${rowCurrnetIndex}:${colName[colCurrnetIndex + colCount]}${
rowCurrnetIndex + rowCount
}`
)
}
}
}
}
return merges
}
export default function pasteToFile(event) {
if (event.clipboardData || event.originalEvent) {
const clipboardData = event.clipboardData || window.clipboardData
const xlsxText = Papa.parse(clipboardData.getData('text'), { delimiter: '\t', linebreak: '\r\n' }).data
if (xlsxText.length < 1) {
return
}
xlsxText[xlsxText.length - 1].every(item => item === '') && xlsxText.pop()
const allIsSpace = []
for (const index in xlsxText) {
xlsxText[Number(index)].every(item => item === '') && allIsSpace.push(index)
}
for (const index of allIsSpace) {
xlsxText.splice(Number(index), 1)
}
const workbook = utils.book_new()
const worksheet = utils.aoa_to_sheet(xlsxText)
utils.book_append_sheet(workbook, worksheet, 'Sheet1')
const data = write(workbook, { type: 'array', bookType: 'xlsx' })
return new Blob([data])
}
}