[英]JavaScript - Convert CSV to XLSX (Preferably Without Use of Library(s))
正如标题所说,我目前有一个从 SharePoint 列表数据创建的 CSV 文件,为了将此信息显示为电子表格,我想将其转换为 Excel XLSX 文件。 我更喜欢在不依赖第三方库的情况下执行此操作。 起初,我开始使用 ActiveX 对象来尝试重新创建和/或将 CSV 保存为 XLSX,但是有一个限制,因为我无法在 IE 之外的其他浏览器中真正使用它。 我在想使用 Blob 以某种方式转换它? 这就是我被困的地方。
function createCsv(data) {
var result = "";
if (data == null || data.length == 0) {
return;
}
var columnDelimiter = ',';
var lineDelimiter = '\n';
var keys = Object.keys(data[0]);
// spreadsheet header
result += keys.join(columnDelimiter);
result += lineDelimiter;
// spreadsheet data
data.forEach(function (obj) {
var count = 0;
keys.forEach(function (key) {
if (count > 0) {
result += columnDelimiter;
}
result += obj[key];
count++;
});
result += lineDelimiter;
});
return result;
}
function downloadCsv(csv) {
if (csv == null) {
return;
}
var filename = "test.csv";
csv = "data:text/csv;charset=utf-8," + csv;
var data = encodeURI(csv);
console.log(data);
var link = document.getElementById('csv');
link.setAttribute('href', data);
link.setAttribute('download', filename);
console.log(link);
//displayCsv(csv);
}
function displayCsv() {
// using test csv here
var message = "data:text/csv;charset=utf-8, yo, hey, lol";
//var fileType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
var fileType = "application/msexcel";
var csvFile = new Blob([message], {type: fileType});
var csvUrl = URL.createObjectURL(csvFile);
console.log(csvFile);
console.log(csvUrl);
}
CSV 可以很好地使用电子表格(通过下载并在 Excel 中打开它),但我真的需要一种方法将其显示为网页上的电子表格而不是文本,所以这就是我希望将其转换的原因。 由于我在 SharePoint 中使用它,因此我可以使用 Excel Web 部件来显示 XLSX - 但它不会像这样打开 CSV 文件。 提前致谢。
尝试手动尝试在没有库的情况下执行此操作将是一项艰巨的任务。 虽然 OpenXML 文件的核心是基于 XML 的,但它们也被捆绑/压缩。
我建议看看 SheetJS。 https://sheetjs.com/
您可以将 CSV 作为输入,然后立即将其写回为 XSLX。
我不确定这是否能解决您的问题,但如果 xls 文件就足够了,您只需在 csv 的第一行添加一个分隔符标签并将其重命名为 xls 即可创建一个 xls 文件。 围绕价值的报价也很重要。
例如:
"sep=,"
"Service","Reported","Total","%"
"a service","23","70","32.86%"
"yet_a_service","27","70","38.57%"
"more_services","20","70","28.57%"
如果您可以使用第三方库(我强烈建议考虑转换中涉及的复杂性),如果需要在 nodejs 中完成,此解决方案将满足您的需求。
如果要在浏览器中使用它,则需要修改convertCsvToExcel函数以将缓冲区转换为 blob 对象,然后将该 blob 转换为 XLS 文件。
// Convert a CSV string to XLXS buffer
// change from xlxs/xls and other formats by going through sheetsjs documentation.
import * as XLSX from 'xlsx';
export const convertCsvToExcelBuffer = (csvString: string) => {
const arrayOfArrayCsv = csvString.split("\n").map((row: string) => {
return row.split(",")
});
const wb = XLSX.utils.book_new();
const newWs = XLSX.utils.aoa_to_sheet(arrayOfArrayCsv);
XLSX.utils.book_append_sheet(wb, newWs);
const rawExcel = XLSX.write(wb, { type: 'base64' })
return rawExcel
}
// Express request handler for sending the excel buffer to response.
export const convertCsvToExcel = async (req: express.Request, res: express.Response) => {
const csvFileTxt = fileBuffer.toString()
const excelBuffer = convertCsvToExcelBuffer(csvFileTxt)
res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
res.status(200).send(Buffer.from(excelBuffer, 'base64'))
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.