JScript使用Excel TextToColumns

时间:2015-06-19 21:10:20

标签: excel jscript wsh

我一直试图让这个小片段工作,但我一直在失败。该脚本似乎工作正常,但问题是:我需要将第三列(带数字的列)转换为文本。

查看Excel中的帮助页面,似乎“数组(3,2)”部分可以实现,但即使在此函数上尝试了很多数字和参数的组合,我也无法使其正常工作。 / p>

有关此问题的任何帮助吗?

var app = new ActiveXObject("Excel.Application");
app.Visible = true;
var xls = app.Workbooks.Add();

app.Cells(1, 1).Value = "Olympia, WA, 123";
app.Cells(2, 1).Value = "Salem, OR, 3434";
app.Cells(3, 1).Value = "Boise, ID, 342";
app.Cells(4, 1).Value = "Sacramento, CA, 3";

app.Range("A1").EntireColumn.TextToColumns(app.Range("B1"),1,1,false,false,false,true,false,false,Array(3, 2));

2 个答案:

答案 0 :(得分:3)

这里有两个问题。

第一个问题是您用于 FieldInfo 参数的格式不正确。参数应该是数组数组。这种数组的JScript格式如下所示:

.->

(在我的测试中,我必须指定所有三列。如果你不关心其他列,请为xlGeneralFormat将每个数组的第二项设置为1。)

然而,事情并非如此简单,因为Excel与大多数COM对象一样,期望数组是SAFEARRAY结构。在VBScript中,这不是问题,因为它的数组是使用SAFEARRAY实现的,但是在JScript中,数组本质上是一种特殊类型的对象,不容易转换为SAFEARRAY(如果this article from Eric Lippert's blog中有更多内容,请参阅this SO question你想要更多细节)。没有内置的方法可以将JScript数组转换为SAFEARRAY,但有一些解决方法(例如,参见documentation)。

第二个问题是你实际上缺少一个参数 OtherChar 。尽管文档声明仅在其他// 2 = xlTextFormat [[1, 2], [2, 2], [3, 2]] // or, if you prefer using the Array() function: Array(Array(1, 2), Array(2, 2), Array(3, 2)) 时才需要此参数,但由于JScript中没有可选参数,因此仍需提供一些值。在下面的示例中,我展开了函数调用,并使用here中的参数名称标记了每一行,以明确说明:

True

答案 1 :(得分:0)

FieldInfo参数需要是一个数组数组,而不是在没有new的情况下调用本机JScript数组构造函数时返回的内容。

通过单独修改列来降低复杂性:

app.Range("A1").EntireColumn.TextToColumns(app.Range("B1"),1,1,false,false,false,true,false,false);
app.Range("D1").EntireColumn.NumberFormat = "@"