我有一个角度应用程序,用户可以在其中将表格导出为CSV。尽管它在台式机上运行良好,但是当尝试在移动设备上打开它时,出现以下错误: “无法打开文档电子表格似乎已损坏”。 我用这个网站 documentation 检查CSV,并收到以下警告:
”上下文问题:编码不正确 您的CSV似乎以ASCII-8BIT编码。我们建议您使用UTF-8。“
在稍微寻找解决方案之后,我发现了很多问题,但是我的代码似乎已经有了解决方案(BOM),所以我不知道还有什么遗漏。 这是我的代码(这是一个有角度的应用程序)
protected exportCSV(items: any, fileName: string): void {
const isItemsExists = Array.isArray(items) && items.length > 0;
if (!isItemsExists) {
this.alertService.showTranslatedMessage('dataExporterService.errors.noItemToExport', '', MessageSeverity.error);
return;
}
const replacer = (key, value) => value === null ? '' : value; // specify how you want to handle null values here
const header = Object.keys(items[0]);
const csv = items.map(row => header.map(fieldName => JSON.stringify(row[fieldName], replacer)).join(','));
csv.unshift(header.join(','));
const csvArray = csv.join('\r\n');
const BOM = '\uFEFF'; // Use this and utf8 to support hebrew
const blob = new Blob([BOM + csvArray], {
type: 'data:text/csv;charset=utf-8'
});
this.fileSaver.save(blob, fileName);
}