将多维数组转换为JavaScript中CSV文件的列,并使用浏览器bookmarklet保存
通过使用bookmarklet在浏览器中运行Javascript,我的目标是从网页上的链接收集数据,然后将其放入格式化的CSV中进行下载。我看到的任务是:将多维数组转换为JavaScript中CSV文件的列,并使用浏览器bookmarklet保存,javascript,arrays,csv,export-to-csv,bookmarklet,Javascript,Arrays,Csv,Export To Csv,Bookmarklet,通过使用bookmarklet在浏览器中运行Javascript,我的目标是从网页上的链接收集数据,然后将其放入格式化的CSV中进行下载。我看到的任务是: 获取数据 将其放入数组中 格式为CSV 导出数据(作为可下载文件或加载到浏览器中以手动保存) 我已经完成了1和2,给了我一个数组数组作为表的列。我被困在3号和4号。以下是数据示例: // test data for 'const' column (length of array will be variable) var dataColumn
// test data for 'const' column (length of array will be variable)
var dataColumn = ["tt0468569", "tt0111161", "tt1795369", "tt7738450"];
// making arrays for other columns in export table (most of the other columns will be empty)
var emptyArray = Array(dataColumn.length).fill('')
var titleType = Array(dataColumn.length).fill('Feature Film')
// make array of arrays (columns) ready to export as csv
var dataTable = [emptyArray,dataColumn,emptyArray,emptyArray,emptyArray,emptyArray,titleType,emptyArray,emptyArray,emptyArray,emptyArray,emptyArray,emptyArray,emptyArray,emptyArray,emptyArray];
// column headers for table
var tableHeaders = ["position","const","created","modified","description","Title","Title type","Directors","You rated","IMDb Rating","Runtime (mins)","Year","Genres","Num. Votes","Release Date (month/day/year)","URL"]
以及我想要的输出:
position,const,created,modified,description,Title,Title type,Directors,You rated,IMDb Rating,Runtime (mins),Year,Genres,Num. Votes,Release Date (month/day/year),URL
,tt0468569,,,,,Feature Film,,,,,,,,,
,tt0111161,,,,,Feature Film,,,,,,,,,
,tt1795369,,,,,Feature Film,,,,,,,,,
,tt7738450,,,,,Feature Film,,,,,,,,,
一种方法是-格式化应该只是将所有单独的行(TableHeader+所有datatable行)输出到一个数组中,然后将数组连接到一个带有“行尾”符号的长字符串中(这可能会自动发生,也可能不会自动发生,您可能需要使用它)。然后将结果字符串放入页面上的链接/按钮中 因此,大致如下:
var OutString = [];
// your existing code here for defining the headers
OutString[0] = TableHeader
for (var i = 1; i < LineCount; ++i) { // looping mechanism through pickup from the page
// your existing code here for picking up the details
OutString[i] = dataTable
}
TestFunc += OutString.join(''); // or whatever you want your end of line to be
OutPutLine = '<a href="data:text/plain;charset=UTF-8, ' + encodeURIComponent(TestFunc) + '" download="' + decodeURIComponent(escape('your file name here')) +'">{optional button etc here}</a>';
var-OutString=[];
//您的现有代码用于定义标题
突出部分[0]=表头
对于(var i=1;i
然后将OutPutLine写入页面元素 一种方法是-格式化应该只是将所有单独的行(TableHeader+所有datatable行)输出到一个数组中,然后将数组连接到一个带有“行尾”符号的长字符串中(这可能会自动发生,也可能不会自动发生,您可能需要使用它)。然后将结果字符串放入页面上的链接/按钮中 因此,大致如下:
var OutString = [];
// your existing code here for defining the headers
OutString[0] = TableHeader
for (var i = 1; i < LineCount; ++i) { // looping mechanism through pickup from the page
// your existing code here for picking up the details
OutString[i] = dataTable
}
TestFunc += OutString.join(''); // or whatever you want your end of line to be
OutPutLine = '<a href="data:text/plain;charset=UTF-8, ' + encodeURIComponent(TestFunc) + '" download="' + decodeURIComponent(escape('your file name here')) +'">{optional button etc here}</a>';
var-OutString=[];
//您的现有代码用于定义标题
突出部分[0]=表头
对于(var i=1;i
然后将OutPutLine写入页面元素 您几乎完成了数组的创建,只需更改创建
tableData
的方法即可。您需要相应地映射它们,而不是将tableData
附加一组数组作为empty array
和title array
请看下面的代码片段:
函数下载Excel(){
var dataColumn=[“tt0468569”、“TT011161”、“tt1795369”、“tt7738450”];
var tableHeaders=[“位置”、“常数”、“创建”、“修改”、“描述”、“标题”、“标题类型”、“董事”、“您评级”、“IMDb评级”、“运行时间(分钟)”、“年份”、“流派”、“票数”、“发布日期(月/日/年)”、“URL”];
//现在创建了excel数据的容器,即tableHeaders+DataHeaders:
var dataTable=新数组();
push(tableHeaders);
//现在围绕数据进行循环
dataColumn.forEach(函数(col){
数据表。推送(['',col','','','','','','','','','','','','','','','');
});
//现在将给定的数组转换为“csv”内容
让csvContent=“data:text/csv;charset=utf-8,”;
dataTable.forEach(函数(rowArray){
让row=rowArray.join(“,”);
csvContent+=行+“\r\n”;
});
//通过锚定标记(链接)调用csv下载,以便我们可以提供文件名
var encodedUri=encodeURI(csvContent);
var link=document.createElement(“a”);
link.setAttribute(“href”,encodedUri);
link.style.display='none';
link.setAttribute(“下载”,“myCSV.csv”);//将其更改为提供您自己的名称
link.innerHTML=“单击此处下载”;
document.body.appendChild(link);//FF需要
link.click();
link.remove();//下载后删除链接
}
单击我下载excel
您几乎完成了数组的创建,只需更改创建表格数据的方法即可。您需要相应地映射它们,而不是将tableData
附加一组数组作为empty array
和title array
请看下面的代码片段:
函数下载Excel(){
var dataColumn=[“tt0468569”、“TT011161”、“tt1795369”、“tt7738450”];
var tableHeaders=[“位置”、“常数”、“创建”、“修改”、“描述”、“标题”、“标题类型”、“董事”、“您评级”、“IMDb评级”、“运行时间(分钟)”、“年份”、“流派”、“票数”、“发布日期(月/日/年)”、“URL”];
//现在创建了excel数据的容器,即tableHeaders+DataHeaders:
var dataTable=新数组();
push(tableHeaders);
//现在围绕数据进行循环
dataColumn.forEach(函数(col){
数据表。推送(['',col','','','','','','','','','','','','','','','');
});
//现在将给定的数组转换为“csv”内容
让csvContent=“data:text/csv;charset=utf-8,”;
dataTable.forEach(函数(rowArray){
让row=rowArray.join(“,”);
csvContent+=行+“\r\n”;
});
//通过锚定标记(链接)调用csv下载,以便我们可以提供文件名
var encodedUri=encodeURI(csvContent);
var link=document.createElement(“a”);
link.setAttribute(“href”,encodedUri);
link.style.display='none';
link.setAttribute(“下载”,“myCSV.csv”);//将其更改为提供您自己的名称
link.innerHTML=“单击此处下载”;
document.body.appendChild(link);//FF需要
link.click();
link.remove();//下载后删除链接
}
点击我下载excel
看看。谢谢。我已经读过了,但我无法使用它。我的技能还不足以解决如何在我的工作中使用它