使用Javascript将对象数组导出为Excel表格

3
我是一名有用的助手,可以为您进行文本翻译。以下是需要翻译的内容:

我正在编写一个客户端方法,它创建一个对象数组。我打开一个现有的Excel表,将来自数组的值写入其中。我使用getProperty获取值并存储在变量中。当我尝试将这些值写入Excel时,出现“事件处理程序失败,带有消息”。

代码:

var getItemtoExcel = document.thisItem.newItem("ToExcel", "get");
getItemtoExcel = getItemtoExcel.apply();

var arrToExcel = Array();
for (var j = 0; j < getItemtoExcel.getItemCount(); j++) {
    var gotItemForExcel = getItemtoExcel.getItemByIndex(j);
    arrToExcel.push(gotItemForExcel);
}

var Excel = new ActiveXObject("Excel.Application");
Excel.Visible = true;
Excel.Workbooks.Open("C:\\test.xls");

var offset = 0;
var row = 2;
for (var c = 0; c < arrToExcel.length; c++) {
    var createExcel = arrToExcel[c];
    var Number = createExcel.getProperty("nb");
    var Type = createExcel.getProperty("type");
    var Code = createExcel.getProperty("code");
    var State = createExcel.getProperty("state");

    Excel.Worksheets("sheet11").Range("A" & row + 1 + offset).Value = Number;
    Excel.Worksheets("sheet11").Range("B" & row + 1 + offset).Value = Type;
    Excel.Worksheets("sheet11").Range("C" & row + 1 + offset).Value = Code;
    Excel.Worksheets("sheet11").Range("D" & row + 1 + offset).Value = State;
    row = row + 1;
}

offset = offset + 1;
return this;

document.thisItem.newItem() 是来自ARASPLM的标准,用于调用ARAS中的ItemType(Item)。


编号 类型 代码状态 ABC121415 PA 进行中-PA121 ABC171819 PS 进行中-PS171 - GBI
你能提供一个完整的、易于理解的 Excel 数据添加示例吗?此外,代码的一部分看起来不像 JavaScript……document.thisItem 对象背后是什么?它不是原生的,甚至在 JScript 中也不是。它是一个库还是你自己实现的?请把额外的信息放到你的问题中,而不是评论中。 - Teemu
如何在论坛中发布图片或附件? - GBI
Teemu,我可以使用getProperty方法从数组中获取值。我也尝试使用alert显示每个值,比如Number、Type等。现在唯一的问题是当我在Excel中编写时,会出现“事件处理程序失败并显示消息”的问题。 - GBI
格式化……但如果不是绝对必要的话,您应该用文字解释问题,而不是图片。 - Teemu
3个回答

12
如果你有机会使用SheetJS,那么它非常简单。
首先,安装xlsx包:npm install --save xlsx
  const XLSX = require('xlsx')
  
  // array of objects to save in Excel
  let binary_univers = [{'name': 'Hi','value':1},{'name':'Bye','value':0}]

  let binaryWS = XLSX.utils.json_to_sheet(binary_univers); 
  
  // Create a new Workbook
  var wb = XLSX.utils.book_new() 

  // Name your sheet
  XLSX.utils.book_append_sheet(wb, binaryWS, 'Binary values') 

  // export your excel
  XLSX.writeFile(wb, 'Binaire.xlsx');

1
我认为使用这个方法可以得到你想要的结果,但是你需要将你的对象值与此一起传递,就像我在这里提到的(你的数据(对象))一样。

window.open('data:application/vnd.ms-excel,' + **(Your Data(Object))**);

这里我提供了一个简单的代码,使用jQuery将数据获取到Excel格式中。

示例演示


@GBI,请查看我提供的 jsfiddle,虽然它使用了 jQuery,但基础是 JavaScript Excel。 - Himesh Aadeshara
谢谢提供链接。我不知道如何使用你建议的代码,请告诉我如何使用它。 - GBI
数据对象以数组形式存在,我使用.getProperty()获取值。请查看代码,arrToExcel是我从中获取值的数组。存储在Number、Type、Code和State中的值将被打印到Excel中。 - GBI
你在遇到函数错误时,是否已经引入了jQuery库? - Himesh Aadeshara
@GBI 你是否了解jQuery框架?**<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>** 只需将加粗的代码添加到HTML文件的head部分即可。 - Himesh Aadeshara
显示剩余2条评论

-2

感谢您在这个问题上提供的所有建议。 我已经成功地将数组导出到 .csv 文件中。 以下是代码,供其他需要的人参考。

var getItemtoExcel=this.newItem("MyForm", "get");
getItemtoExcel=getItemtoExcel.apply();

var arrToExcel = Array();
for (var j=0; j<getItemtoExcel.getItemCount(); j++) 
{
var gotItemForExcel=getItemtoExcel.getItemByIndex(j);
arrToExcel.push(gotItemForExcel);
}

var fso = new ActiveXObject("Scripting.FileSystemObject"); 
var s = fso.CreateTextFile("C:\\REPORT.csv", true); 
var title="Report";
s.WriteLine(title);
var header="Number" + ";" + "Type" + ";" + "Code"  + ";" + "Created On"  + ";" +  "State" +  '\n' ;
s.WriteLine(header);

for (var c=0; c<arrToExcel.length; c++){
var createExcel = arrToExcel[c];

var Number =createExcel.getProperty("nb");
var Type=createExcel.getProperty("type");
if(Type===undefined){Type="";}
var Code=createExcel.getProperty("code");
if(Code===undefined){Code="";}
var Date=createExcel.getProperty("created_on");
var State=createExcel.getProperty("created_by_id/@keyed_name");

var value=Number + ";" + Type + ";" + Code + ";" + Date + ";" + State;
s.WriteLine(value);
}
s.Close();
alert("Report Saved as C:\\REPORT.csv");
return this;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接