5

我需要在未安装 Microsoft Office 的 PC 上使用 VBScript 向电子表格中添加一行。

我试过 [ Set objExcel = CreateObject("Excel.Application")]

由于 PC 上不存在 Excel,我无法创建此对象。

有没有办法在没有 Excel 的情况下修改电子表格?

4

10 回答 10

9

要使用下面的代码,请在与 vbscript 文件相同的文件夹中创建一个名为“Test.xls”的 Excel 工作簿。

在 Test.xls 中,在单元格 A1 到 B4 中输入以下数据:

First   Last
Joe     Smith
Mary    Jones
Sam     Nelson

将下面的 vbscript 代码粘贴到 .vbs 文件中:

Const adOpenStatic = 3
Const adLockOptimistic = 3

filename = "Test.xls"
Set cn = CreateObject("ADODB.Connection")
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & filename & _
        ";Extended Properties=Excel 8.0"

query = "Select * from [Sheet1$A1:B65535]"
Set rs = CreateObject("ADODB.Recordset")
rs.Open query, cn, adOpenStatic, adLockOptimistic

rs.AddNew
rs("First") = "George"
rs("Last") = "Washington"
rs.Update

rs.MoveFirst
Do Until rs.EOF
  WScript.Echo rs.Fields("First") & " " & rs.Fields("Last")
  rs.MoveNext
Loop

在命令提示符处,键入:

CSCRIPT Yourfile.vbs

它将在电子表格中添加一个名称,然后写出所有名称。

Joe Smith
Mary Jones
Sam Nelson
George Washington
于 2008-10-31T16:57:45.117 回答
2

您可以尝试使用 Microsoft Jet Driver:

有关 vbscript 示例,请参见此处。有关更多链接和插入行的方法,请参见此处

于 2008-10-31T13:10:35.513 回答
1

这是我使用的脚本的最终版本,谢谢大家的帮助。

Dim arrValue
arrValue = Array("Test","20","","I","2.25","3.9761","20","60","12","1","","1","1","1")
AddXLSRow "C:\Test.xls", "A1:N109", arrValue

Sub AddXLSRow(strSource, strRange, arrValues)
'This routine uses the data from an array to fill fields in the specified spreadsheet.
'Input strSource (String) = The Full path and filename of the spreadsheet to be used.
'Input arrValues (Array) = An array of values to be added to the spreadsheet.
Dim strConnection, conn, rs, strSQL, index

strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strSource & ";Extended Properties=""Excel 8.0;HDR=Yes;"";"

Set conn = CreateObject("ADODB.Connection")
conn.Open strConnection
Set rs = CreateObject("ADODB.recordset")
strSQL = "SELECT * FROM " & strRange
rs.open strSQL, conn, 3,3
rs.AddNew 
index = 0
For Each field In rs.Fields
         If field.Type = 202 Then
                   field.value = arrValues(index)
         ElseIffield.Type = 5 And arrValues(index) <> "" Then
                   field.value = CDbl(arrValues(index))
         End If
         If NOT index >= UBound(arrValues) Then
                   index = index + 1
         End If
Next
rs.Update
rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing
End Sub
于 2008-10-31T19:14:38.740 回答
1

并非没有极大的困难。Microsoft 已在此处发布了他们的文件格式规范Excel,但这些都不能掉以轻心,我认为您将很难使用 VBScript。

于 2008-10-31T13:09:17.700 回答
1

我知道......几年后,但今天我需要弄清楚如何使用 vbScript 访问 Excel 电子表格,而无需在我的服务器上加载 Excel。我在网上搜索,发现你的信息很有帮助,但我还需要更多,所以我一直在搜索。我终于找到了我需要的解决方案,并想在这里分享它,以防其他人遇到和我一样的问题。

我试图在 Windows 2008 服务器上使用 vbScript 访问(读/写)一个 Excel 电子表格,但我不想在我的服务器上安装 Excel。我的解决方案在这里(它使用 PowerShell,但很容易解密为 VBS):

使用 vbScript 读取未安装 Excel 的 Excel 电子表格

在未安装 Excel 的情况下使用 vbScript 写入 Excel 电子表格

我希望这对将来需要相同解决方案的人有所帮助。

L8R...

UCG

于 2011-04-23T16:55:48.633 回答
0

如果没有安装 Excel,我看不到您将如何更改 Excel 文档。

但是,如果您使用的是 Excel 2007 电子表格 (xslx),那么您应该能够使用 .NET Framework 的 OpenXML 功能来更新内容,而无需实际安装 Excel。

在此处查看有关 Office OpenXML 的更多信息。

于 2008-10-31T13:08:07.857 回答
0

很抱歉迟到了。没有人提到VSTO的事实可能意味着我误解了这个问题。无论如何,我从使用它的人那里听到了褒贬不一的评价。

于 2008-10-31T19:57:59.980 回答
0

你可能想看看这个问题。它基于 C#,但应该让您深入了解访问电子表格的技术。

于 2008-10-31T13:57:31.783 回答
-1

我相信您的问题的简单答案是否定的,因为您需要仅在安装 Excel 时安装的 Excel COM 对象。这曾经是编写 Office 应用程序的真正缺点之一——需要整个应用程序(Excel、Word 或其他)才能让最终用户使用它。

于 2008-10-31T17:02:57.320 回答
-2

使用 EPPlus。epplus.codeplex.com

你可以做大多数你可以用 VSTO 做的事情,而无需安装 excel。

于 2012-12-13T11:08:42.027 回答