Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Office (Word, Excel, Outlook и т.д.) (http://forum.oszone.net/forumdisplay.php?f=115)
-   -   [решено] Редактирование Excel , командная строка CMD + VBS (http://forum.oszone.net/showthread.php?t=285071)

DEDI 15-07-2014 00:31 2376565

Редактирование Excel , командная строка CMD + VBS
 
Нужна помощь, не пойму в чем дело. Нужно редактировать таблицу Excel из под командной строки. По моему все легко но хоть убей не могу разобраться со vbs скриптом!.

Нашел скрипт, когда стал подгонять его под себя начались проблемы, полный ппц.

Из командной строки это выглядит примерно так: edit_xls.vbs Excel.xlsx 1 2 3 "X date"
edit_xls.vbs - скрипт
Excel.xlsx - таблица
1 и 2 - координаты ячейки
3 - номер листа ( вот на номере листа он у меня и ошибку кидает)
"X date" - значение

Скрипт (Который мучаю):
читать дальше »
Код:

xlsFileName = WScript.Arguments.Item(0)
xlsx = WScript.Arguments.Item(1)
xlsy = WScript.Arguments.Item(2)
xlssheets = WScript.Arguments.Item(3)
xlsvalue = WScript.Arguments.Item(4)
set fso = createobject("Scripting.FileSystemObject")
set a = createobject("excel.application")
set b = a.workbooks.open(xlsFileName)
WScript.Echo "Num " & xlssheets & ""
set s = b.sheets ("" & xlssheets & "")
s.Cells(""&xlsx&"", ""&xlsy&"").Value = ""&xlsvalue&""
b.save
b.close true
a.quit



Оригинал: (cyberforum, пользователь Abu)
читать дальше »
Код:

const xlsFileName = "c:\forTest\book and vbs.xls" ' тута имя xls файла
set fso = createobject("Scripting.FileSystemObject")
set a = createobject("excel.application")
set b = a.workbooks.open(xlsFileName) 'открываем книгу
set s = b.sheets(1) 'номер листа в книге
for i = 1 to 10 'заполним первые десять строк первого столбца
    s.Cells(i,1).Value = i*1000
Next
b.close true 'закроем книгу, сохранив изменения
a.quit 'закроем Excel



Конкретного шаблона таблицы нет.

Думал подогнать вордовский скрипт (который мне идеально подходит) под ексель, но ни в какукую.

Скрипт: (Спасибо Iska)
читать дальше »
Код:

Option Explicit

Const wdReplaceAll = 2

Dim strDocument
Dim strACT
Dim strClient
Dim strService
Dim strDate
Dim strMobileTel
Dim strSN
Dim strNOTE

Dim objFSO

Dim arrStrings


If WScript.Arguments.Count = 8 Then
        strDocument      = WScript.Arguments.Item(0)
        strDate          = WScript.Arguments.Item(1)
        strACT          = WScript.Arguments.Item(2)
        strClient        = WScript.Arguments.Item(3)
        strMobileTel    = WScript.Arguments.Item(4)
        strService      = WScript.Arguments.Item(5)
        strSN            = WScript.Arguments.Item(6)
        strNOTE          = WScript.Arguments.Item(7)
       
        Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
       
        If objFSO.FileExists(strDocument) Then
                With WScript.CreateObject("Word.Application")
                        With .Documents.Open(strDocument)
                                For Each arrStrings In Array( _
                                                Array("Дата",                strDate), _
                                                Array("Номер акта",          strACT), _
                                                Array("Клиент",              strClient), _
                                                Array("Номер телефона",      strMobileTel), _
                                                Array("Оборудование\\Сервис", strService), _
                                                Array("Серийный номер",      strSN), _
                                                Array("Заметка",              strNOTE) _
                                        )
                                       
                                        With .Content.Find
                                                .ClearFormatting
                                                .Text = "(" & arrStrings(0) & ": )(*)(^13)"
                                               
                                                .MatchWildcards = True
                                                .Format        = False
                                                .MatchCase      = True
                                               
                                                With .Replacement
                                                        .ClearFormatting
                                                        .Text = "\1" & arrStrings(1) & "\3"
                                                End With
                                               
                                                .Execute , , , , , , , , , , wdReplaceAll
                                        End With
                                Next
                               
                                .Save
                                .Close
                        End With
                       
                        .Quit
                End With
        Else
                WScript.Echo "Can't find document [" & strDocument & "]."
        End If
Else
        WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Document> <Date> <Number ACT> <Client> <Telephone number> <Service> <Serial number> <Note>"
End If

WScript.Quit 0



За ранее огромное спасибо!

Iska 15-07-2014 02:33 2376596

Цитата:

Цитата DEDI
Из командной строки это выглядит примерно так: edit_xls.vbs Excel.xlsx 1 2 3 "X date"

3 - номер листа ( вот на номере листа он у меня и ошибку кидает) »

Какую именно ошибку? Где приложенный образец файла «Excel.xlsx»?

Если именно номер листа, а не имя — тогда никак не:
Код:

set s = b.sheets ("" & xlssheets & "")
а:
Код:

set s = b.sheets(xlssheets)
можете даже уточнить как:
Код:

set s = b.sheets(CLng(xlssheets))

DEDI 15-07-2014 19:33 2376925

Iska, Спасибо!!!

Вот скрипт: (Рабочий =))
читать дальше »
Код:

Dim xlsFileName
Dim xlsx
Dim xlsy
Dim xlssheets
Dim xlsvalue

xlsFileName = WScript.Arguments.Item(0)
xlsx = WScript.Arguments.Item(1)
xlsy = WScript.Arguments.Item(2)
xlssheets = WScript.Arguments.Item(3)
xlsvalue = WScript.Arguments.Item(4)
set fso = createobject("Scripting.FileSystemObject")
set co = createobject("excel.application")
set b = co.workbooks.open(xlsFileName)
set s = b.sheets(CLng(xlssheets))
s.Cells(CLng(xlsx),CLng(xlsy)).Value = xlsvalue
b.save
b.close true
co.quit



Но может будут еще варианты интересные?)

Iska 17-07-2014 07:15 2377415

Цитата:

Цитата DEDI
Но может будут еще варианты интересные?) »

Держите «интересный вариант» ;) — то же самое, но с проверками:
читать дальше »
Код:

Option Explicit

Dim objFSO

Dim strSourceFile
Dim intWorksheetNumber
Dim intRowNumber
Dim intColumnNumber
Dim strNewValue


If WScript.Arguments.Count = 5 Then
        strSourceFile = WScript.Arguments.Item(0)
       
        Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
       
        If objFSO.FileExists(strSourceFile) Then
                Select Case LCase(objFSO.GetExtensionName(strSourceFile))
                        Case "xls", "xlsx"
                                If IsNumeric(WScript.Arguments.Item(1)) Then
                                        intWorksheetNumber = CInt(WScript.Arguments.Item(1))
                                       
                                        If IsNumeric(WScript.Arguments.Item(2)) Then
                                                intRowNumber = CInt(WScript.Arguments.Item(2))
                                               
                                                If IsNumeric(WScript.Arguments.Item(3)) Then
                                                        intColumnNumber = CInt(WScript.Arguments.Item(3))
                                                       
                                                        strNewValue = WScript.Arguments.Item(4)
                                                       
                                                        With WScript.CreateObject("Excel.Application")
                                                                With .Workbooks.Open(strSourceFile)
                                                                        If .Worksheets.Count >= intWorksheetNumber Then
                                                                                .Worksheets.Item(intWorksheetNumber).Cells.Item(intRowNumber, intColumnNumber).Value = strNewValue
                                                                        Else
                                                                                WScript.Echo "Worksheet number [" & WScript.Arguments.Item(1) & "] greater then worksheets count in workbook."
                                                                                .Close
                                                                                .Application.Quit
                                                                                WScript.Quit 7
                                                                        End If
                                                                       
                                                                        .Save
                                                                        .Close
                                                                End With
                                                               
                                                                .Quit
                                                        End With
                                                Else
                                                        WScript.Echo "Column number [" & WScript.Arguments.Item(3) & "] is not a numeric value."
                                                        WScript.Quit 6
                                                End If
                                        Else
                                                WScript.Echo "Row number [" & WScript.Arguments.Item(2) & "] is not a numeric value."
                                                WScript.Quit 5
                                        End If
                                Else
                                        WScript.Echo "Worksheet number [" & WScript.Arguments.Item(1) & "] is not a numeric value."
                                        WScript.Quit 4
                                End If
                        Case Else
                                WScript.Echo "Source file [" & strSourceFile & "] probably is not an Excel document."
                                WScript.Quit 3
                End Select
        Else
                WScript.Echo "Source file [" & strSourceFile & "] not found."
                WScript.Quit 2
        End If
       
        Set objFSO = Nothing
Else
        WScript.Echo "Usage: cscript.exe //nologo " & WScript.ScriptName & " <Source file> <Worksheet number> <Row number> <Column number> <New cell's value>"
        WScript.Quit 1
End If

WScript.Quit 0



Время: 20:49.

Время: 20:49.
© OSzone.net 2001-