Как изменить электронную таблицу Excel без Excel с помощью VBScript?

Мне нужно добавить строку в электронную таблицу с помощью VBScript на ПК, на котором не установлен Microsoft Office.

Я пробовал [Set objExcel = CreateObject("Excel.Application")]

Поскольку Excel не существует на ПК, я не могу создать этот объект.

Есть ли способ изменить электронную таблицу без Excel?

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
4
0
23 987
10

Ответы 10

Без установленного Excel я не могу понять, как вы сможете изменить документ Excel.

Однако, если вы используете электронные таблицы Excel 2007 (xslx), вы должны иметь возможность использовать функциональность OpenXML .NET Framework для обновления содержимого без физической установки Excel.

Взгляните на здесь для получения дополнительной информации об Office OpenXML.

Не без особого труда. Microsoft опубликовала свои спецификации формата файлов, Excel здесь, но к ним нельзя относиться легкомысленно, и я думаю, вам будет сложно использовать VBScript.

Вы можете попробовать использовать драйвер Microsoft Jet:

См. здесь для образца vbscript. См. здесь для получения дополнительных ссылок и способов вставки строк.

Возможно, вы захотите увидеть этот вопрос. Он основан на C#, но должен дать вам представление о методах доступа к таблицам.

Чтобы использовать приведенный ниже код, создайте книгу Excel с именем «Test.xls» в той же папке, что и файл vbscript.

В 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

Я думал, он сказал, что у него нет Excel?

Onorio Catenacci 31.10.2008 20:00

Это не зависит от Excel. Он использует ODBC.

aphoria 31.10.2008 21:16

Я считаю, что простой ответ на ваш вопрос - нет, потому что вам нужен COM-объект Excel, который устанавливается только при установке Excel. Раньше это было одним из реальных недостатков написания приложения Office - необходимость всего приложения (Excel, Word или чего-то еще), чтобы конечный пользователь мог его использовать.

Это последняя версия скрипта, который я использовал, спасибо всем за помощь.

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

Извините за опоздание на вечеринку. Тот факт, что никто не упомянул ВСТО, вероятно, означает, что я неправильно понимаю вопрос. И, во всяком случае, я слышал смешанные отзывы от людей, использующих его.

VSTO по-прежнему требует установки Office, AFAIK.

ProfK 03.11.2008 18:53

Я знаю ... годы спустя, но сегодня мне нужно было выяснить, как получить доступ к электронной таблице Excel с помощью vbScript, не загружая Excel на свой сервер. Я поискал в сети и нашел вашу информацию полезной, но мне все еще нужно было больше, поэтому я продолжал поиск. Я наконец нашел решение, которое мне было нужно, и хотел поделиться им здесь на случай, если у кого-то еще возникнут те же проблемы, что и у меня.

Я пытался получить доступ (читать / писать) к электронной таблице Excel с помощью vbScript на сервере Windows 2008, и я не хотел устанавливать Excel на свой сервер. Мое решение было здесь (оно использует PowerShell, но его легко расшифровать на VBS):

Использование vbScript для чтения из электронной таблицы Excel без установленного Excel

Использование vbScript для записи в электронную таблицу Excel без установленного Excel

Я надеюсь, что это поможет кому-то, кому в будущем понадобится такое же решение.

L8r ...

UCG

Используйте EPPlus. epplus.codeplex.com

Вы можете делать большинство вещей, которые вы можете делать с VSTO, без установленного Excel.

Другие вопросы по теме