正如标题所说,我目前有一个从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中下载并打开),但我真的需要一种方法将其显示为网页上的电子表格而不是文本,这就是为什么我&#39 ;我希望将其转换过来。由于我在SharePoint中使用此功能,因此我可以使用Excel Web部件来显示XLSX - 但它不会像这样打开CSV文件。提前谢谢。
答案 0 :(得分:2)
我不确定这是否可以解决您的问题,但是如果xls文件足以满足您的要求,您只需在CSV的第一行添加分隔符标签并将其重命名为xls即可创建xls文件。 围绕值的引号也很重要。
例如:
library(plotly)
#Labels
ticklabels <- seq(from=0, to=round(max(diamonds$depth*10000)), by=10000)
ticktexts <- c(0,paste(ticklabels[-1]/1000, " 000", sep=""))
#Code
diamonds %>%
plot_ly(x=~clarity,y=~~depth*10000) %>%
add_bars() %>%
layout(yaxis=list(tickvals = ticklabels,
ticktext = ticktexts
))
答案 1 :(得分:1)
尝试在没有库的情况下手动尝试将是一项相当艰巨的任务。尽管OpenXML文件以XML为核心,但它们也被捆绑/压缩。
我建议您看一下SheetJS。 https://sheetjs.com/
您可以将CSV作为输入,并立即将其写回XSLX。