AngularJS读取Excel时如何将日期类文本保留为原字符串?
解决Excel读取时含日期文本被自动转为日期格式的问题
核心问题原因
SheetJS(XLSX库)默认会自动识别单元格内容类型,当文本中包含类似February 16的日期格式片段时,会被误判为日期类型转换,导致原始文本丢失。
两种有效解决方法
方法一:全局强制读取原始字符串
在读取Excel文件时添加raw: true配置项,直接跳过所有自动类型识别,将所有单元格内容以原始字符串形式读取。
function ProcessExcel(data) { // 关键配置:raw: true 强制保留原始文本 const workbook = XLSX.read(data, { raw: true }); const firstSheetName = workbook.SheetNames[0]; const worksheet = workbook.Sheets[firstSheetName]; const jsonData = XLSX.utils.sheet_to_row_object_array(worksheet); // 后续处理展示逻辑 }
方法二:针对日期类型单元格反向转换
如果需要保留其他单元格的类型识别,仅修正被误转的日期单元格,可以遍历工作表,将日期类型的单元格转回字符串格式。
function ProcessExcel(data) { const workbook = XLSX.read(data); const firstSheetName = workbook.SheetNames[0]; const worksheet = workbook.Sheets[firstSheetName]; // 遍历所有单元格,修正日期类型内容 for (const cellAddr in worksheet) { // 跳过工作表元数据(以!开头的键) if (cellAddr.startsWith('!')) continue; const cell = worksheet[cellAddr]; // 单元格类型为'd'表示已被识别为日期 if (cell.t === 'd') { // 将日期对象转为匹配原始文本的格式(示例为"February 16") cell.v = XLSX.SSF.format('mmmm dd', cell.v); // 将单元格类型改为字符串 cell.t = 's'; } } const jsonData = XLSX.utils.sheet_to_row_object_array(worksheet); // 后续处理展示逻辑 }
方法对比
- 方法一操作简单,从根源避免类型误判,适合所有需要保留原始文本的场景;
- 方法二灵活性更高,但需要针对原始文本格式调整转换逻辑,仅适合部分单元格需要修正的场景。
内容的提问来源于stack exchange,提问作者erasmo carlos
相关产品推荐
相关产品推荐

