Microsoft Office がインストールされていない PC で、VBScript を使用してスプレッドシートに行を追加する必要があります。
Set objExcel = CreateObject("Excel.Application")
[ ]を試しました
PC に Excel が存在しないため、このオブジェクトを作成できません。
Excel を使用せずにスプレッドシートを変更する方法はありますか?
以下のコードを使用するには、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
これは私が使用したスクリプトの最終バージョンです。助けてくれてありがとう。
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
私は知っています...数年後ですが、今日、サーバーにExcelをロードせずにvbScriptを使用してExcelスプレッドシートにアクセスする方法を理解する必要がありました。ネットで検索したところ、あなたの情報は役に立ちましたが、まだもっと必要だったので、検索を続けました. 他の誰かが私と同じ問題を抱えている場合に備えて、必要な解決策を見つけて、ここで共有したいと思いました.
Windows 2008 サーバーで vbScript を使用して Excel スプレッドシートにアクセス (読み取り/書き込み) しようとしましたが、サーバーに Excel をインストールしたくありませんでした。私の解決策はここにありました(PowerShellを使用していますが、VBSに解読するのは簡単です):
vbScript を使用して、Excel がインストールされていない Excel スプレッドシートから読み取る
vbScript を使用して、Excel がインストールされていない Excel スプレッドシートに書き込む
これが、将来同じソリューションを必要とする人に役立つことを願っています。
L8r...
UCG
極度の困難がないわけではありません。Microsoft はファイル形式の仕様を公開しています。Excel はこちら ですが、これらを軽視することはできません。VBScript を使用するのは難しいと思います。
この質問を見たいと思うかもしれません。これはC#ベースですが、スプリートシートにアクセスするための手法についての洞察が得られるはずです。
Excel がインストールされていないと、Excel ドキュメントを変更する方法がわかりません。
ただし、Excel 2007 スプレッドシート (xslx) を使用している場合は、Excel を物理的にインストールしなくても、.NET Framework の OpenXML 機能を使用してコンテンツを更新できるはずです。
Office OpenXML の詳細については、こちらをご覧ください。
パーティーに遅れてすみません。誰もVSTOについて言及していないという事実は、おそらく私が質問を誤解していることを意味します. とにかく、私はそれを使用している人々からさまざまなレビューを聞いています.
ExcelがインストールされているときにのみインストールされるExcelCOMオブジェクトが必要なので、あなたの質問に対する簡単な答えはノーだと思います。これは、Officeアプリを作成する際の実際の欠点の1つでした。つまり、エンドユーザーが使用するためにアプリケーション全体(Excel、Wordなど)が必要でした。
EPPlus を使用します。epplus.codeplex.com
Excel をインストールしなくても、VSTO でできることのほとんどを実行できます。