我一直在努力使这一小段代码起作用,但我却失败了。该脚本似乎可以正常运行,但问题是:我需要将第三列(带有数字的列)转换为文本。
查看Excel中的帮助页面,似乎可以使用“ Array(3,2)”部分,但是即使在此函数上尝试使用数字和参数的许多组合,我也无法使其正常工作。
这个问题有帮助吗?
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));
这里有两个问题。
第一个问题是,您用于FieldInfo参数的格式不正确。该参数应为数组数组。这样的数组的JScript格式如下所示:
// 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))
(在测试中,我必须指定所有三列。如果您不关心其他列,请将xlGeneralFormat的每个数组的第二项设置为1。)
但是,它不是那么简单,因为Excel与大多数COM对象一样,期望数组为SAFEARRAY结构。在VBScript中,这不是问题,因为其数组是使用SAFEARRAYs实现的,但是在JScript中,数组本质上是一种特殊类型的对象,不容易转换为SAFEARRAY(您可以从Eric Lippert的博客中阅读本文的更多内容如果您需要更多详细信息)。尽管有解决方法,但没有内置方法可以将JScript数组转换为SAFEARRAY(例如,请参见此SO问题)。
第二个问题是您实际上缺少一个参数OtherChar。即使文档指出,当这个参数时,才需要其他的True
,你还是有,因为有在JScript中没有可选参数提供一些价值。在下面的示例中,我扩展了函数调用,并使用文档中的参数名称将每一行标记为清楚:
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"), // Destination
1, // DataType
1, // TextQualifier
false, // ConsecutiveDelimiter
false, // Tab
false, // Semicolon
true, // Comma
false, // Space
false, // Other
'', // OtherChar
getSafeArray([
getSafeArray([1, 2]),
getSafeArray([2, 2]),
getSafeArray([3, 2])
]) // FieldInfo
);
// ref: https://stackoverflow.com/a/5910730
function getSafeArray(jsArr) {
var dict = new ActiveXObject("Scripting.Dictionary");
for (var i = 0; i < jsArr.length; i++)
dict.add(i, jsArr[i]);
return dict.Items();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句