/**
* Office 文件预览处理器
* 使用动态导入减小初始包体积
*/
// Excel 预览处理器
export async function previewExcel(file, container) {
try {
// 动态导入 xlsx 库
const XLSX = await import('xlsx')
// 读取文件
const arrayBuffer = await file.arrayBuffer()
const workbook = XLSX.read(arrayBuffer, { type: 'array' })
// 获取第一个工作表
const firstSheetName = workbook.SheetNames[0]
const worksheet = workbook.Sheets[firstSheetName]
// 转换为 HTML 表格
const html = XLSX.utils.sheet_to_html(worksheet, {
editable: false,
header: '',
footer: ''
})
// 渲染到容器
container.innerHTML = `
📊 ${firstSheetName}
${workbook.SheetNames.length} 个工作表
${html}
`
return { success: true }
} catch (error) {
console.error('Excel 预览失败:', error)
return { success: false, error: error.message }
}
}
// Word 预览处理器
export async function previewWord(file, container) {
try {
// 动态导入 mammoth 库
const mammoth = await import('mammoth')
// 读取文件并转换为 HTML
const arrayBuffer = await file.arrayBuffer()
const result = await mammoth.convertToHtml({ arrayBuffer })
// 渲染到容器
container.innerHTML = `
${result.value}
${result.messages.length > 0 ? `
转换警告 (${result.messages.length})
${result.messages.map(msg => `- ${msg.message}
`).join('')}
` : ''}
`
return { success: true }
} catch (error) {
console.error('Word 预览失败:', error)
return { success: false, error: error.message }
}
}
// 判断是否为 Office 文件
export function isOfficeFile(fileName) {
const ext = fileName?.toLowerCase()?.split('.').pop()
return ['xlsx', 'xls', 'docx', 'doc'].includes(ext)
}
// 判断是否为 Excel 文件
export function isExcelFile(fileName) {
const ext = fileName?.toLowerCase()?.split('.').pop()
return ['xlsx', 'xls'].includes(ext)
}
// 判断是否为 Word 文件
export function isWordFile(fileName) {
const ext = fileName?.toLowerCase()?.split('.').pop()
return ['docx', 'doc'].includes(ext)
}