Vbs сохранить как excel файл

  • Remove From My Forums
  • Question

  • I have the following VB script (I saved my VB script file as «open_document.vbs» and use Notepad as my editor):

    Const xlDelimited  = 1
    
    Set objExcel = CreateObject("Excel.Application")
    objExcel.Visible = True
    
    objExcel.Workbooks.OpenText "C:Scriptsjun_24v.txt",,,xlDelimited,,,,,,,True,"~"
    
    ojbExcel.Save As "C:documents and settingsjeromezdesktopjun_24v.xls"

    ———————————————————-

    PURPOSE OF SCRIPT:
    once the txt file is open in Excel and parsed, I want the script to save the not as a txt, but as an Excel file using  «Save as» file type «Excel» to my desktop

    but it seems to save the file as «jun_24.xls» with the fileFormat as «Txt Delimited» and I want it to be «Microsoft Excel»

    The file opens as an Excel file if I double-click on the file icon.  

    However, if I try to open the file from an instance of Excel (i.e. «File > Open») it still thinks the file is a text file and brings up the text box asking me if I want to «Delimted» or Fixed Width»

    I would think after «Save As» I should be able to open file as an Excel file from Excel and not have to double-click on the icon

    What am I doing wrong?

    Any help would be appreciated

    Thanks

    • Edited by

      Tuesday, June 30, 2009 12:14 AM

Answers

  • Sorry about the confusion, I have Excel 2007 and xlExcel8 was added for it, so the script errors out if you have Excel 2003. Try using xlWorkbookNormal (= -4143) instead. Here is th modified script:

    Const xlDelimited  = 1
    Const xlWorkbookNormal = -4143
    
    Set objExcel = CreateObject("Excel.Application")
    objExcel.Visible = True
    
    objExcel.Workbooks.OpenText "C:Scriptsjun_24v.txt", _
        , , xlDelimited, , , , , , , True, "~"
    
    objExcel.Workbooks("jun_24v.txt").SaveAs _
        "C:Scriptsjun_24v.xls", xlWorkbookNormal
    
    objExcel.Workbooks("jun_24v.xls").Close
    
    objExcel.Quit
    
    


    urkec

    • Marked as answer by
      jeromez
      Tuesday, June 30, 2009 11:47 PM

I have the following code, I want it to open my files which are saved as .xlsx and simply save them again with the same filename but this time as a .xls file so that they are compatible with Excel 2003

Set app = CreateObject("Excel.Application")
Set fso = CreateObject("Scripting.FileSystemObject")

For Each f In fso.GetFolder("Y:Billing_Commonautoemail").Files
  If LCase(fso.GetExtensionName(f)) = "xlsx" Then
    Set wb = app.Workbooks.Open(f.Path)

app.DisplayAlerts = False

wb.SaveAs "*.xls*"
wb.Close SaveChanges=True
app.Close
app.Quit

  End if

Set f = Nothing
Set fso = Nothing
Next

Kara's user avatar

Kara

6,08516 gold badges51 silver badges57 bronze badges

asked Jul 4, 2013 at 7:50

Nathan Hawthorne's user avatar

1

As Bathsheba already pointed out, Set fso = Nothing and app.Quit belong at the end of the script (outside the loop). There are some more bugs, though.

  • wb.SaveAs "*.xls*"

    You can’t save a workbook to a wildcard name. If you want to save the workbook under its current name, just use wb.Save. Otherwise you’ll have to use an explicit name (you should also set the filetype then):

    wb.SaveAs "new.xlsx", 51
    

    or

    wb.SaveAs "C:pathtonew.xls", -4143
    
  • wb.Close SaveChanges=True

    VBScript doesn’t support named parameters (see here). If you want to call the Close method with the SaveChanges parameter set to True you have to do it like this:

    wb.Close True
    
  • app.Close

    The application object doesn’t have a Close method.

Not bugs, but things worth improving:

  • app.DisplayAlerts = False should go before the loop starts unless you re-enable it inside the loop as well.

  • I’d recommend adding a line app.Visible = False after you create the application object. When you have to debug your script you can simply change that value to True to show the application on your desktop. That helps a lot with finding bugs.

Fixed-up script:

Set app = CreateObject("Excel.Application")
app.Visible = False
app.DisplayAlerts = False

Set fso = CreateObject("Scripting.FileSystemObject")

For Each f In fso.GetFolder("Y:Billing_Commonautoemail").Files
  If LCase(fso.GetExtensionName(f)) = "xlsx" Then
    Set wb = app.Workbooks.Open(f.Path)

    wb.Save
    wb.Close True
  End if
Next

app.Quit
Set app = Nothing
Set fso = Nothing

Community's user avatar

answered Jul 4, 2013 at 8:42

Ansgar Wiechers's user avatar

Ansgar WiechersAnsgar Wiechers

190k23 gold badges244 silver badges319 bronze badges

5

Two serious bugs:

  • Set fso = Nothing should not be inside your loop: you’ll need fso
    for the duration of the program.

  • Also, drop app.Quit from the loop; keep Excel open until the very
    end.

Set f = Nothing is unnecessary (although benign); let the loop pick the values for you.

answered Jul 4, 2013 at 7:55

Bathsheba's user avatar

BathshebaBathsheba

231k33 gold badges359 silver badges477 bronze badges

Dim app, fso, file, fName, wb, dir 

dir = "d:path"

Set app = CreateObject("Excel.Application")
Set fso = CreateObject("Scripting.FileSystemObject")

For Each file In fso.GetFolder(dir).Files
    If LCase(fso.GetExtensionName(file)) = "xlsx" Then  
    fName = fso.GetBaseName(file)

    Set wb = app.Workbooks.Open(file) 
    app.Application.Visible = False
    app.Application.DisplayAlerts = False
    app.ActiveWorkbook.SaveAs dir & fName & ".xls", 43
    app.ActiveWorkbook.Close 
    app.Application.DisplayAlerts = True 
    app.Application.Quit 

    End if
Next

Set fso = Nothing
Set wb = Nothing    
Set app = Nothing

wScript.Quit

answered Oct 23, 2014 at 15:50

Dimzay's user avatar

8 / 8 / 1

Регистрация: 09.10.2013

Сообщений: 613

1

VBS

Сохранение открытого экселевского файла

12.02.2015, 09:32. Показов 2892. Ответов 10


Студворк — интернет-сервис помощи студентам

Как сохранить открытый экселевский файл с текущей датой в имени файла.Сохранение осуществить в ту же папку, где и был открыт экселевский файл. Буду рад любой помощи. Заранее благодарен!



0



Pure Free Digital Ghost

4603 / 1915 / 372

Регистрация: 06.01.2013

Сообщений: 4,569

12.02.2015, 10:25

2

adb420, Вам это необходимо именно скриптом на VBS или все же макросом на VBA?



0



8 / 8 / 1

Регистрация: 09.10.2013

Сообщений: 613

12.02.2015, 10:42

 [ТС]

3

FraidZZ, хотелось бы все таки скриптом на vbs, но если vbs никак, то можно и макрасом на vba будет



0



Surrogate

Ушел с CyberForum совсем!

873 / 182 / 25

Регистрация: 04.05.2011

Сообщений: 1,020

Записей в блоге: 110

12.02.2015, 11:29

4

в vba работает. а в vbs в 25 строке ошибку находит

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub vv()
Dim xlON$, xlNN$, xlExt$, dat$
 Set xlApp = GetObject(, "Excel.Application")
   On Error Resume Next
   Set xldoc = xlApp.ActiveWorkbook
   If Err.Number <> 0 Then
      Wscript.Echo "Îøèáêà îòêðûòèÿ öåëåâîãî äîêóìåíòà"
      Exit Sub
   End If
xlPath = xldoc.Path
xlON = xldoc.Name
dat = Format("dd-mm-yy", Now())
xlExt = Right(xlON, InStrRev(xlON, ".") - 1)
xlNN = Left(xlON, InStr(xlON, ".") - 1)
xldoc.SaveAs Filename:=xlNN & dat & xlExt
End Sub



0



8 / 8 / 1

Регистрация: 09.10.2013

Сообщений: 613

12.02.2015, 11:34

 [ТС]

5

Surrogate,

Цитата
Сообщение от Surrogate
Посмотреть сообщение

а в vbs в 25 строке ошибку находит

так код из 16 строк состоит, который Вы мне скинули



0



Surrogate

Ушел с CyberForum совсем!

873 / 182 / 25

Регистрация: 04.05.2011

Сообщений: 1,020

Записей в блоге: 110

12.02.2015, 11:48

6

попробуй этот, что не идет в vbs

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Dim xlApp
Dim xlDoc
dim xlON
dim xlNN
dim xlPath
dim xlExt
dim dat
dim nn
Proc
sub Proc()
   Set FSO = CreateObject("Scripting.FileSystemObject")
   Set xlApp = GetObject( ,"Excel.Application")
   On Error Resume Next
   Set xlDoc = xlApp.activeworkbook
   If Err.Number <> 0 Then
      Wscript.Echo "Ошибка открытия целевого документа"
      Exit Sub
   End If
xlPath = xlDoc.path
xlON = xldoc.Name
dat = Format("dd-mm-yy", Now())
xlExt = Right(xlON, InStrRev(xlON, ".") - 1)
xlNN = Left(xlON, InStr(xlON, ".") - 1)
nn = xlNN & dat & xlExt
xldoc.saveas NN
xlDoc.Close, savechanges:=False
set xlDoc = nothing
xlApp.Quit
set xlApp = nothing
End Sub



0



adb420

8 / 8 / 1

Регистрация: 09.10.2013

Сообщений: 613

12.02.2015, 12:01

 [ТС]

7

Surrogate, что то все равно не так работает. из под vba, не понятно куда сохраняет(не сохраняет в ту папку, где был открыт файл эксель), из под vbs ругается на 26 строку

Visual Basic
1
xlDoc.Close, savechanges:=False

убрал :, оставил просто =, ругаться перестал, но и не сохраняет тоже



0



Surrogate

Ушел с CyberForum совсем!

873 / 182 / 25

Регистрация: 04.05.2011

Сообщений: 1,020

Записей в блоге: 110

12.02.2015, 13:16

8

Лучший ответ Сообщение было отмечено adb420 как решение

Решение

думаю это излишне закрывать открытую книгу экселя. это мой второй опыт работы с VBS

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Dim xlApp
Dim xlDoc
dim xlON
dim xlNN
dim xlPath
dim xlExt
dim dat
dim NN
dim d
Proc
sub Proc()
   Set FSO = CreateObject("Scripting.FileSystemObject")
   Set xlApp = GetObject( ,"Excel.Application")
   On Error Resume Next
   Set xlDoc = xlApp.activeworkbook
   If Err.Number <> 0 Then
      Wscript.Echo "Ошибка открытия целевого документа"
      Exit Sub
   End If
xlPath = xlDoc.path
xlON = xldoc.Name
d = InStr(xlON, ".") 
dat = replace(left(Now(),10),".","_")
xlExt = Right(xlON, d - 1)
xlNN = Left(xlON, len(xlon) - d+1)
NN = xlpath & "" & xlNN & "-" & dat & xlExt
msgbox NN
xldoc.SaveCopyAs NN
set xlDoc = nothing
set xlAp

вроде работает



1



8 / 8 / 1

Регистрация: 09.10.2013

Сообщений: 613

12.02.2015, 13:43

 [ТС]

9

Surrogate, и в правду работает!) спасибо)
а как сделать так ,что бы экселевский файл после этого еще и закрывался…
и проверку наверно какую-то надо, если файл не открыт, то выдать сообщение, что файл не открыт.

Добавлено через 6 минут
спасибо! надеюсь на помощь и в этих двух вопросах!)



0



Surrogate

Ушел с CyberForum совсем!

873 / 182 / 25

Регистрация: 04.05.2011

Сообщений: 1,020

Записей в блоге: 110

12.02.2015, 17:12

10

Цитата
Сообщение от adb420
Посмотреть сообщение

надеюсь на помощь и в этих двух вопросах!)

Не по теме:

надеюсь кто-нибудь еще откликнется, сегодня я уже не помошник :)

Добавлено через 3 часа 13 минут

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Dim xlApp
Dim xlDoc
dim xlON
dim xlNN
dim xlPath
dim xlExt
dim dat
dim NN
dim d
Proc
sub Proc()
   Set FSO = CreateObject("Scripting.FileSystemObject")
   Set xlApp = GetObject( ,"Excel.Application")
if xlApp.workbooks.count = 0 then 
Wscript.Echo "Нет открытых книг"
Exit Sub
Else
Set xldoc = xlApp.activeworkbook
xlPath = xlDoc.path
xlON = xldoc.Name
d = InStr(xlON, ".") 
dat = replace(left(Now(),10),".","_")
xlExt = Right(xlON, len(xlon) - d+1)
xlNN = Left(xlON, d - 1)
NN = xlpath & "" & xlNN & "-" & dat & xlExt
Wscript.Echo NN
xldoc.SaveCopyAs NN
xldoc.close false
set xlDoc = nothing
set xlApp = nothing
End If
End sub

Добавлено через 11 минут
PS не осилил, как сделать чтоб вылетало сообщение если Эксель не открыт



0



Эксперт WindowsАвтор FAQ

17992 / 7618 / 890

Регистрация: 25.12.2011

Сообщений: 11,351

Записей в блоге: 17

24.02.2015, 19:22

11

Surrogate,
Поставить обработчик ошибок (On Error Resume Next) перед GetObject.
Затем проверять по коду ошибки Err.Number.



1



В данной статье я научу вас автоматизировать Microsoft Excel средствами VBS.

В прошлой статье я описывал работу с Word.

Привожу сразу код, так как он подробно прокомментирован:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

Option Explicit

Dim oExcelApp ‘ Объявляем переменные

Dim oRangeD2D8

Dim oRangeH2J8

Set oExcelApp = CreateObject(«Excel.Application») ‘ Создаём объект с Excelем

oExcelApp.Visible = True ‘ Делаем Excel видимым

oExcelApp.Workbooks.Add ‘ Добавляем книгу в Excel

oExcelApp.Cells(2,2).Font.Bold = True ‘ Делаем текст жирным в ячейке 1,1

oExcelApp.Cells(2,2).Font.Size = 20 ‘ Устанавливаем размер шрифта

oExcelApp.Cells(2,2).Font.ColorIndex = 2 ‘ Устанавливаем цвет текста

oExcelApp.Cells(2,2).Interior.ColorIndex = 1 ‘ Устанавливаем цвет ячейки

oExcelApp.Cells(2,2).Value = «Test» ‘ Добавляем данные

Set oRangeD2D8 = oExcelApp.Range(«D2″,»D8») ‘ Получаем доступ к ряду ячеек

oRangeD2D8.Font.Size = 16 ‘ Устанавливаем размер шрифта

oRangeD2D8.Font.Italic = True ‘ Делаем курсивный текст

oRangeD2D8.Font.Underline = True ‘ Делаем текст подчёркнутым

oRangeD2D8.Value = «Test» ‘ Устанавливаем для всех них текст

Dim i

For i = 2 To 6

oExcelApp.Cells(i,6).Value = i ‘ заполняем ячейки числами

Next

oExcelApp.Cells(8,6).Font.Bold = True

oExcelApp.Cells(8,6).Font.Underline = True

oExcelApp.Cells(8,6).Font.Size = 24

oExcelApp.Cells(8,6).Formula = «=SUM(F2:F6)» ‘ Добавляем формулу, которая в ячейке F8 отобразит сумму ранее добавленных цифр

Set oRangeH2J8 = oExcelApp.Range(«H2»,«J8») ‘ Получаем доступ к ячейкам H2:J8

oRangeH2J8.Merge ‘ Объединяем группу ячеек

oExcelApp.Save ‘ Сохраняем Excel файл

oExcelApp.Quit ‘ Закрываем Excel

Результат работы скрипта:

vbs script for excel

Помогла ли вам данная статья, ответьте в комментариях.

Загрузка…

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

1 2011-04-28 11:54:50

  • Pitkin
  • Участник
  • Неактивен
  • Рейтинг : [0|0]

Тема: VBScript: Как преобразовать текстовый файл в файл xls

Всем доброго времени суток.

Товарищи, помогите пожалуйста новичку. Есть текстовый файл вида:
142459875
1635
180
20110426

142460066
387
180
20110426

142460100
395
207
20110426

Необходимо преобразовать его в формат xls. Просомтрел всю документацию по VBScript, но ничего толкового не нашел.
Также половину интернета перерыл Причем необходимо, сделать так, чтобы строки в каждом блоке стали столбцами, возможно ли такое?
Пожалуйста помогите, кто чем может. Буду очень благодарен.

2 Ответ от tankist 2011-04-28 12:30:42 (изменено: tankist, 2011-04-28 12:32:11)

  • tankist
  • Участник
  • Неактивен
  • Рейтинг : [0|0]

Re: VBScript: Как преобразовать текстовый файл в файл xls

Доброго дня.
Имхо, проще вставить текст в Excel, предварительно его обработав в блокноте (ну там, удалить лишние пробелы, сделать пустые строки — пустыми и т.д.) и обработать текст вручную — формулами или макросом. Макрос однозначно будет проще, чем писать скрипт по «подаче» этих данных в екслель, плюс потом пакеткая обработка.
Элементарно это сделать с помощью формул. Допустим, указанные данные начинаются в ячейке A2, тогда в ячейку B2 вставляется формула:

=ЕСЛИ($A1="";СМЕЩ($A2;СТОЛБЕЦ()-СТОЛБЕЦ($A2);0;1;1);"")

Растягиваем на 3 столбца вправо, потом вниз, и вуаля — данные из столбца в стоках. Можно еще и проверку на 0 сделать, если количество непрерывных строк бывает разным (в указанном примере 4 строки — пробел, 4 строки — пробел):

=ЕСЛИ($A1="";ЕСЛИ(A2="";"";ЕСЛИ(СМЕЩ($A2;СТОЛБЕЦ()-СТОЛБЕЦ($A2);0;1;1)=0;"";СМЕЩ($A2;СТОЛБЕЦ()-СТОЛБЕЦ($A2);0;1;1)));"")

Останется только удалить «лишние» строки, но это делается без скриптов — прочтите справку по кнопке «Выделение группы ячеек…»

// Если у носорога плохое зрение, то при его весе — это не его проблема.

3 Ответ от Pitkin 2011-04-28 13:03:59

  • Pitkin
  • Участник
  • Неактивен
  • Рейтинг : [0|0]

Re: VBScript: Как преобразовать текстовый файл в файл xls

Я так понимаю, что сам текстовый файл, просто импортировать ручками из Excel?
Просто задача состоит в том, что бы в определенное время суток автоматически выполнялся скрипт, который будет брать данные строки из текстового файла, затем переносить их в файл xls формата и выкладывать на сетевой ресурс. Все данные задачи уже решены, кроме преобразования текстового файла в файл Excel.

4 Ответ от Dmitrii 2011-04-28 13:30:02 (изменено: Dmitrii, 2011-04-28 13:34:19)

  • Dmitrii
  • Разработчик
  • Неактивен
  • Рейтинг : [0|0]

Re: VBScript: Как преобразовать текстовый файл в файл xls

Pitkin пишет:

… скрипт, который будет брать данные строки из текстового файла, затем переносить их в файл xls формата <…> Все данные задачи уже решены, кроме преобразования текстового файла в файл Excel.

1. Непонятно, зачем вообще какие-то преобразования, когда уже есть сценарий, который «умеет» обрабатывать текстовый файл и формировать рабочую книгу.
2. Непонятно, зачем Вам именно формат XLS. Если только для того, чтобы файл с данными был автоматически связан с приложением Excel и распознавался им как «свой», то достаточно задать исходному текстовому файлу расширение CSV.

5 Ответ от Pitkin 2011-04-28 13:35:42 (изменено: Pitkin, 2011-04-28 13:38:29)

  • Pitkin
  • Участник
  • Неактивен
  • Рейтинг : [0|0]

Re: VBScript: Как преобразовать текстовый файл в файл xls

Да, можно сделать и так. Извините в первом посте забыл указать, что преобразование нужно с целью изменения строк в столбцы, то есть
Есть текстовый документ txt, в котором находятся данные в таком виде:
————
Строка 1
Строка 2
Строка 3
Строка 1
Строка 2
Строка 3
Строка 1
Строка 2
Строка 3
————
Как данный документ импортировать в excel чтобы данные приняли вид таблицы
из трех столбцов 
        Строка1         Строка2         Строка3
        Строка1         Строка2         Строка3
       ………..       …………..       ……….
        Строка1         Строка2         Строка3

Хотя, в excel можно не импортировать, просто, чтобы  в самом файле csv строки автоматически становились столбцами, подскажите пожалуйста если кто знает.

Попробую пока с формулами в самом excele поколдовать.

6 Ответ от Dmitrii 2011-04-28 13:42:44

  • Dmitrii
  • Разработчик
  • Неактивен
  • Рейтинг : [0|0]

Re: VBScript: Как преобразовать текстовый файл в файл xls

Pitkin пишет:

… чтобы  в самом файле csv строки автоматически становились столбцами…

Приведите содержимое текстового файла к виду
Строка 1;Строка 2;Строка 3
Строка 1;Строка 2;Строка 3
Строка 1;Строка 2;Строка 3

7 Ответ от Pitkin 2011-04-28 13:48:18 (изменено: Pitkin, 2011-04-28 13:59:20)

  • Pitkin
  • Участник
  • Неактивен
  • Рейтинг : [0|0]

Re: VBScript: Как преобразовать текстовый файл в файл xls

Эх, если бы я знал как. Если честно сказать, то это мой второй скрипт в жизни
Я вчера целый день писал код как из 300 текстовых файлов собрать все данные в один, вроде получилось
Для меня как новичка это подвиг

Код:
Dim objFSO: Set objFSO = CreateObject(«Scripting.FileSystemObject»)

JoinTXT «C:tmp»

Sub JoinTXT(strFolderPath)
Dim objFolder, objFile, strTempText, strAllText

If objFSO.FolderExists(strFolderPath) Then
    Set objFolder = objFSO.GetFolder(strFolderPath)
    For Each objFile In objFolder.Files
        strExt = LCase(objFSO.GetExtensionName(objFile.Path))
        If (strExt = «») Or (strExt = «log») Then
            strTempText = ReadFile(objFile.Path)
            If strTempText <> «» Then
                strAllText = strAllText & strTempText & vbCrLf 
‘& vbCrLf «===== » & objFile.Name & » =====» & Разделение между строк
            End If
            ‘objFile.Delete True   ‘ удалить файл
        End If
    Next
End If

Set objFile = objFSO.CreateTextFile(strFolderPath & «AllTextFiles.txt»)
objFile.Write strAllText
objFile.Close
End Sub

MsgBox «Результирующий файл сформирован»
Set objFSO = Nothing
Wscript.quit

Function ReadFile(strTempFilePath)
On Error Resume Next

Dim objTempFile, strText
    Set objTempFile = objFSO.OpenTextFile(strTempFilePath, 1, False)
    strText = objTempFile.Readall
    objTempFile.Close

ReadFile = strText

End Function

Правда не без помощи документации и интернета

8 Ответ от BeS Yara 2011-04-28 14:09:06

  • BeS Yara
  • Разработчик
  • Неактивен
  • Рейтинг : [2|0]

Re: VBScript: Как преобразовать текстовый файл в файл xls

Преобразовать в csv достаточно просто(при условии что формат файла именно такой как приведён в первом посте):


option explicit
Const ForReading = 1 :  Const ForWriting = 2 :  Const ForAppending = 8
Const TristateUseDefault = -2 :  Const TristateTrue = -1 :  Const TristateFalse = 0

Dim fso, f, ts
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile("C:aScriptsvbstxt2xlsinput.txt")
Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)

Dim data
data = ts.ReadAll
ts.Close
Set f = fso.GetFile("C:aScriptsvbstxt2xlsoutput.csv")
data = Replace(Replace(data, vbCrLf, ";"), ";;", vbCrLf)
Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault)
ts.Write data
ts.Close

Это «скелет» — без проверок наличия файлов, папок, доступности файлов на запись.

Если требуется именно эксель, то вместо записи в текстовой файл обрабатываем записи поэлементно. Например так:


Dim Rows, Cells, i, j
Rows = Split(data, VbCrLf & VbCrLf, -1, vbTextCompare)
For i = LBound(Rows) to UBound(Rows)
 Cells = Split(Rows(i), VbCrLf, -1, vbTextCompare)
 For j = LBound(Cells) to UBound(Cells)
  wscript.echo "Cells[" & j & "] = " & Cells(j)
 Next
Next

Вместо вывода в консоль, пишем в ячейки(i, j тут как раз пригодятся ) используя экселевский объект.

P.S. «On Error Resume Next» есть, а где «On Error GoTo 0»? Ошибки нужно обрабатывать а не игнорировать

9 Ответ от Pitkin 2011-04-28 14:24:19 (изменено: Pitkin, 2011-04-28 14:30:03)

  • Pitkin
  • Участник
  • Неактивен
  • Рейтинг : [0|0]

Re: VBScript: Как преобразовать текстовый файл в файл xls

Спасибо, огромное, я тут поколдовал немного, и решил этот вопрос проще, в строке с моим кодом где указывается результирующий файл

Set objFile = objFSO.CreateTextFile(strFolderPath & «AllTextFiles.txt»)

Просто поменял расширение, txt на xls и о чудо, формирует xls файл.
Сейчас попробую поковырять ваш код

Я так понял, что вторая часть кода, это как раз то, что нужно для преобразования строк в столбцы?
Не могли бы вы объяснить как это работает, а то не могу понять куда этот кусок вставлять в мой код

10 Ответ от tankist 2011-04-28 14:26:27

  • tankist
  • Участник
  • Неактивен
  • Рейтинг : [0|0]

Re: VBScript: Как преобразовать текстовый файл в файл xls

Pitkin пишет:

Просто задача состоит в том, что бы в определенное время суток автоматически выполнялся скрипт, который будет брать данные строки из текстового файла, затем переносить их в файл xls формата и выкладывать на сетевой ресурс. Все данные задачи уже решены, кроме преобразования текстового файла в файл Excel.

Мне кажется, можно немного перефразировать задачу — создать excel файл c актуальными данными из текстового источника, требующий дополнительных операций преобразований. Есть два пути решения:
1. (Ваш) Создать скрипт, который будет выполняться по таймингу в определенное время и будет выполнять операции: (а) преобразовать данные; (б) создать xls файл; (в) выкладывать результат на определенный ресурс.
2. Создать файл c эксель импортом данных (теперь понятно, что без vba — никуда), который будет автоматически брать последние данные по запросу пользователя (например — «при открытии»).

Как по моему мнению — второй вариант и проще в реализации и актуальней с точки зрения обновления данных. Алгоритм действий vba макроса должен быть такой-же как и алгоритм скрипта по преобразованию текста в csv — значение следующей строки вставлять через разделитель в 1 строку, пока не следующая строка не будет пустой, тогда осуществлять «набор» с новой строки.
К сожалению я, так же слаб в быстром написании скриптов и без мануалов не обхожусь, по этому сейчас, в рабочее время могу поделиться только полезными ссылками:
http://www.rondebruin.nl/tips.htm — см. раздел «Copy/Paste/Merge examples». Там много интересного…
http://www.exceltip.com/exceltips.php?v … amp;ID=214 — советую так же посмотреть остальные разделы
http://excelvba.ru/code/processing_files — русскоязычный ресурс с очень хорошими примерами (там три раздела касаются темы топика)
http://msoffice.nm.ru — то же на русском, правда в количестве примеров нужно долго копаться

// Если у носорога плохое зрение, то при его весе — это не его проблема.

11 Ответ от tankist 2011-04-28 14:31:01

  • tankist
  • Участник
  • Неактивен
  • Рейтинг : [0|0]

Re: VBScript: Как преобразовать текстовый файл в файл xls

Пока неспеша «строчил» ответ, уже написали рабочий пример скрипта. BeS Yara, спасибо, мне тоже пригодится.

// Если у носорога плохое зрение, то при его весе — это не его проблема.

12 Ответ от BeS Yara 2011-04-28 14:53:17

  • BeS Yara
  • Разработчик
  • Неактивен
  • Рейтинг : [2|0]

Re: VBScript: Как преобразовать текстовый файл в файл xls

Просто поменял расширение, txt на xls и о чудо, формирует xls файл.

Это была шутка?
Если нет, то Вы ставите меня в тупик(состояние более известное как «разрыв шаблона»)…

По поводу второго куска кода, это была часть замены. Вот что подразумевалось(вчерне):


option explicit
Const ForReading = 1 :  Const ForWriting = 2 :  Const ForAppending = 8
Const TristateUseDefault = -2 :  Const TristateTrue = -1 :  Const TristateFalse = 0

Dim fso, f, ts
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile("C:aScriptsvbstxt2xlsinput.txt")
Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)

Dim Excel
Set Excel = WScript.CreateObject("Excel.Application")
Excel.Visible = False ' не показывать окно Excel
Excel.WorkBooks.Add
Dim data
data = ts.ReadAll
Dim Rows, Cells, i, j
Rows = Split(data, VbCrLf & VbCrLf, -1, vbTextCompare)
For i = LBound(Rows) to UBound(Rows)
 Cells = Split(Rows(i), VbCrLf, -1, vbTextCompare)
 For j = LBound(Cells) to UBound(Cells)
  Excel.ActiveSheet.Cells(i+1, j+1).Value = Cells(j)
 Next
Next

Excel.ActiveWorkbook.SaveCopyAs "C:aScriptsvbstxt2xlsКнига1.xls"
Excel.DisplayAlerts = False ' не выводить запрос о сохранении
Excel.Quit
Set Excel = Nothing

WSH: преобразуем макрос VBA в скрипт VBScrip, а также поиск по форуму на тему «Excel.Application» даст достаточно много примеров работы с Excel.

13 Ответ от Pitkin 2011-04-28 15:12:38 (изменено: Pitkin, 2011-04-28 15:29:51)

  • Pitkin
  • Участник
  • Неактивен
  • Рейтинг : [0|0]

Re: VBScript: Как преобразовать текстовый файл в файл xls

Со сменой расширения я тоже был крайне удивлен, но это действительно работает, можете опробовать
Кажется я понял, как работает ваш код, только для того, чтобы он работал нужно, чтобы присутствовал пустой файл Книга1.xls
А если будут поступать новые данные, то они будут дополняться, а не затираться, это очень удобно, спасибо огромное

P.S. С меня 83103 литра пива

14 Ответ от BeS Yara 2011-04-28 15:38:16 (изменено: BeS Yara, 2011-04-28 15:39:17)

  • BeS Yara
  • Разработчик
  • Неактивен
  • Рейтинг : [2|0]

Re: VBScript: Как преобразовать текстовый файл в файл xls

CreateTextFile создаёт текстовый файл. XLS — бинарный файл.
То что эксель правильно открыл переименованный текстовой файл не делает тот файл экселевским. Просто удачно сработал конвертер(excel умеет принимать текстовые форматы, хотя не всегда правильно). Переименованный csv(полученный из скрипта) открывается не совсем верно — по строке в ячейку.

Более того — если далее файл будет обрабатываться автоматически, возможны проблемы. Мне как-то подсунули таблицу сохранённую в html-виде, но с расширением XLS — я долго не мог понять почему эксель файл открывает, а скрипт нет. Пока по F3 его не посмотрел. Убил бы!

Далее:
1. наличие файла Книга1.xls не обязательно
2. он не дописывается, а перезаписывается

Скрипт открывает невидимое окно Excel, записывает туда данные, сохраняет в указанный в скрипте файл и закрывает окно Excel. Если нужно дописывать данные, то необходимо открывать этот файл, находить конец данных, и записывать дальше новые. Мой вариант этого не делает.

15 Ответ от Pitkin 2011-04-28 22:52:53

  • Pitkin
  • Участник
  • Неактивен
  • Рейтинг : [0|0]

Re: VBScript: Как преобразовать текстовый файл в файл xls

Всем огромное спасибо, за помощь и за ссылки выложенные здесь. Правда всё еще не осилил Но как говорится, учение — свет, неучение — тень. Теперь буду пытаться полностью автоматизировать процесс, чтобы данные не перезаписывались, а пополнялись сами, ну чтобы на работу ходить только в день зарплаты

P.S.  BeS Yara Все равно наличие файла Книга1.xls требует, не могу понять почему, но буду разбираться, все впереди…

Еще раз всем спасибо, УДАЧИ !!!

16 Ответ от Slav 2011-04-29 09:34:09

  • Slav
  • Разработчик
  • Неактивен
  • Рейтинг : [2|0]

Re: VBScript: Как преобразовать текстовый файл в файл xls

Pitkin пишет:


Просто поменял расширение, txt на xls и о чудо, формирует xls файл.

Еще раз убедился — темы «новичков» таят много интересного.
Мне бы сделать такое даже в голову не пришло — но ведь это работает!

Может пригодиться — спасибо, Pitkin.

17 Ответ от BeS Yara 2011-04-29 12:31:19

  • BeS Yara
  • Разработчик
  • Неактивен
  • Рейтинг : [2|0]

Re: VBScript: Как преобразовать текстовый файл в файл xls

Pitkin, есть файл Книга1.xls — он будет перезаписан, Нет файла Книга1.xls — он будет создан. Можете пояснить что значит «Все равно наличие файла Книга1.xls требует» — в чём это проявляется?

Slav, если в первом моём примере скрипта(где вывод идёт в текстовый файл) поменять расширение на xls, то на выходе будет текстовый файл(«файл1«):

142459875;1635;180;20110426
142460066;387;180;20110426
142460100;395;207;20110426
142459875;1635;180;20110426
142460066;387;180;20110426
142460100;395;207;20110426

Экселевский файл с этими-же данными будет выглядеть примерно так(кусок, все 5к приводить не буду):

РПаЎ±б                > юя                               юяяя        яяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяя                   юяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяR o o t   E n t r y                                              яяяяяяяя         А      F            а
ECМ          W o r k b o o k                                                  яяяяяяяяяяяя

Если открыть экселем текстовый файл «файл1«, то результат будет отнюдь не тот что ожидался — с данными будет только первая колонка, в каждой ячейки которой помещена строка. Мне кажется или это далеко от задачи описанной в первом посте?

Не говоря уже о том что всё зависит от работы(и, кстати, наличия) конвертера текстовых файлов в конкретной версии офиса. Не говоря уже о том, что ОпенОфис при открытии такого «экселевского» файла честно откроет окно импорта из текстового файла(впрочем разделители он распознал вполне корректно).

Я считаю что подобный подход в корне не верен — расширение файла должно соответствовать внутреннему формату. Одну из причин я уже писал. Предположим Ваша организация передавала смежникам экселевские отчёты, которые они обрабатывали автоматически. Теперь Вы решили процесс автоматизировать и скриптом генерируете «экселевские»(а на самом деле текстовые) отчёты. Так вот, скрипт ориентированный на работу с настоящим форматом XLS псевдо экселевские файлы не поймёт(я с этим уже сталкивался). Для начала, пройдёт некоторое время прежде чем обнаружится что данные не получаются. Потом одной из сторон прийдётся переписывать свои скрипты. Кто станет крайнем в потере оперативности из-за смены формата данных?

Если уж нет желания использовать Excell.Application(или его нет — например на сервере не установлен офис), то можно установить MSDE, и все данные сливать туда. А уже с MSDE получить экселевские отчёты элементарно — DTS Вам в помощь

18 Ответ от Slav 2011-04-29 13:34:44

  • Slav
  • Разработчик
  • Неактивен
  • Рейтинг : [2|0]

Re: VBScript: Как преобразовать текстовый файл в файл xls

BeS Yara пишет:


Slav, если в первом моём примере скрипта(где вывод идёт в текстовый файл) поменять расширение на xls, то на выходе будет текстовый файл(«файл1«):

142459875;1635;180;20110426
142460066;387;180;20110426
142460100;395;207;20110426
142459875;1635;180;20110426
142460066;387;180;20110426
142460100;395;207;20110426


Если открыть экселем текстовый файл «файл1«, то результат будет отнюдь не тот что ожидался — с данными будет только первая колонка, в каждой ячейки которой помещена строка. Мне кажется или это далеко от задачи описанной в первом посте?

BeS Yara,

предлагаю еще раз внимательно посмотреть на постановку задачи.
В ней прямо сказано — каждое значение находится в одной строке.

Это Вы предлагаете преобразовать входные данные в формат csv — как раз для решения проблемы «одной строки».
А затем применить трюк с заменой на расширение xls.
Не нужно этого делать — так и читайте с расширением csv.

Я не имею ничего против Excell.Application.
Но давайте оценим разные решения с точки зрения лаконичности — ведь все гениальное просто.

Имея txt-файл с конкретной структурой с одной стороны предлагается сделать еще как минимум 2 файла: скрипт преобразования в csv и на выходе сам csv.
Второе решение — скрипт с Excell.Application, который читает данные — пишет в xls-формате.

А третье решение — назовем его «трюковое» — требует всего-то сменить расширение на xls.
И еще — давайте уж рассмотрим его до конца — небольшую макру Auto_Open в самом Excel, которая переставит значения из исходного формата в строку при открытии файла.
И которая может быть создана пользователем начального уровня в самом Excel путем «записать макро».

Я не хочу давать оценку — какое решение лучше.
Пусть каждый выберет то, которое лично ему больше нравится.
Или больше подходит в данной конкретной ситуации.

Полюбому — лучше всегда знать как можно больше вариантов, в том числе и «трюковых».
Как Вы считаете?

Удачи!

19 Ответ от BeS Yara 2011-04-29 14:01:06

  • BeS Yara
  • Разработчик
  • Неактивен
  • Рейтинг : [2|0]

Re: VBScript: Как преобразовать текстовый файл в файл xls

Slav пишет:

предлагаю еще раз внимательно посмотреть на постановку задачи.
В ней прямо сказано — каждое значение находится в одной строке.

Прочитал. 

Pitkin пишет:

Необходимо преобразовать его в формат xls.
<…>
Причем необходимо, сделать так, чтобы строки в каждом блоке стали столбцами, возможно ли такое?

Так что данные нужно всё-таки транспонировать, причём разделителем результирующих строк служит пустая строка. И «заказанный» формат — XLS, а не текстовый с разделителем

Сформировать CSV предложил Dmitrii, я лишь предложил реализацию(благо код там копеешный, а у меня было свободное время). Потом, поняв уровень спрашивающего уже доделал вариант с экселем(Тут конечно код не идиален, делался полунаучным методом. Но ведь выполняет поставленную задачу )

Slav пишет:

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

Лаконичнее и правильнее было бы обойтись без промежуточных файлов, а формировать отчёт сразу. Если очёты требуется дополнять(возникло такое подозрение по высказываниям Pitkin-а), то я бы всё-таки перешел к хранению в БД. Там гораздо проще манипулировать данными, да и встроенные механизмы получения отчётов в разных форматах тоже присутствуют(про экспресс не уверен, но в MSDE — 100%).

Slav пишет:

Полюбому — лучше всегда знать как можно больше вариантов, в том числе и «трюковых».
Как Вы считаете?

В целом согласен(про пользу разнообразных решений). Что касается «трюков», то тут я своё отношение написал. Их полезно знать, их иногда можно использовать. Но нужно также знать из-за чего эти трюки работают — чтобы понять почему вдруг трюк перестал работать на другом компьютере Думаю что многие тут, на форуме, представляют уровень типового пользователя. Так что чем меньше будет в конечном результате зависеть от опыта работы «оператора»(того к кому попадёт трюковый отчёт), тем надёжнее решение.

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

  • Remove From My Forums
  • Question

  • I have the following VB script (I saved my VB script file as «open_document.vbs» and use Notepad as my editor):

    Const xlDelimited  = 1
    
    Set objExcel = CreateObject("Excel.Application")
    objExcel.Visible = True
    
    objExcel.Workbooks.OpenText "C:Scriptsjun_24v.txt",,,xlDelimited,,,,,,,True,"~"
    
    ojbExcel.Save As "C:documents and settingsjeromezdesktopjun_24v.xls"

    ———————————————————-

    PURPOSE OF SCRIPT:
    once the txt file is open in Excel and parsed, I want the script to save the not as a txt, but as an Excel file using  «Save as» file type «Excel» to my desktop

    but it seems to save the file as «jun_24.xls» with the fileFormat as «Txt Delimited» and I want it to be «Microsoft Excel»

    The file opens as an Excel file if I double-click on the file icon.  

    However, if I try to open the file from an instance of Excel (i.e. «File > Open») it still thinks the file is a text file and brings up the text box asking me if I want to «Delimted» or Fixed Width»

    I would think after «Save As» I should be able to open file as an Excel file from Excel and not have to double-click on the icon

    What am I doing wrong?

    Any help would be appreciated

    Thanks

    • Edited by

      Tuesday, June 30, 2009 12:14 AM

Answers

  • Sorry about the confusion, I have Excel 2007 and xlExcel8 was added for it, so the script errors out if you have Excel 2003. Try using xlWorkbookNormal (= -4143) instead. Here is th modified script:

    Const xlDelimited  = 1
    Const xlWorkbookNormal = -4143
    
    Set objExcel = CreateObject("Excel.Application")
    objExcel.Visible = True
    
    objExcel.Workbooks.OpenText "C:Scriptsjun_24v.txt", _
        , , xlDelimited, , , , , , , True, "~"
    
    objExcel.Workbooks("jun_24v.txt").SaveAs _
        "C:Scriptsjun_24v.xls", xlWorkbookNormal
    
    objExcel.Workbooks("jun_24v.xls").Close
    
    objExcel.Quit
    
    


    urkec

    • Marked as answer by
      jeromez
      Tuesday, June 30, 2009 11:47 PM

Download PC Repair Tool to quickly find & fix Windows errors automatically

Here is a tutorial to convert CSV to XLS or XLSX using the command-line interface in Windows 11/10. There are multiple ways to convert a CSV file to Excel formats (XLS, XLSX). You can use Microsoft Excel, a dedicated converter freeware, or an online tool to perform the conversion. But, did you know that you can also use Windows command-line interface to convert CVS to Excel? And, you don’t even need any third-party tool for that? If not, this tutorial will be pleasantly surprising for you.

In this article, we are going to show you how you can convert a CSV file to an Excel workbook. For that, we will be using a VBScript. Let us check out the script and steps that you need for conversion.

Here are the steps to convert CSV to Excel using Command Line Interface in Windows 11 or Windows 10:

  1. Open Notepad.
  2. Write a Visual Basic Script (VBS).
  3. Save the VBS file.
  4. Open Command Prompt in the folder.
  5. Enter the CSV to Excel conversion command.

Let’s discuss these steps in detail!

Firstly, open the Notepad application on your Windows 10 PC. You now have to write a VBScript with related commands. Below is the full script that you need to enter in the Notepad; just copy from here and paste it into your Notepad:

'======================================
' Convert CSV to Excel
'
' arg1: source - CSV pathfile
' arg2: target - Excel pathfile
'======================================

srccsvfile = Wscript.Arguments(0) 
tgtxlsfile = Wscript.Arguments(1)

'Create Spreadsheet
'Look for an existing Excel instance.
On Error Resume Next ' Turn on the error handling flag
Set objExcel = GetObject(,"Excel.Application")
'If not found, create a new instance.
If Err.Number = 429 Then '> 0
Set objExcel = CreateObject("Excel.Application")
End If

objExcel.Visible = false
objExcel.displayalerts=false

'Import CSV into Spreadsheet
Set objWorkbook = objExcel.Workbooks.open(srccsvfile)
Set objWorksheet1 = objWorkbook.Worksheets(1)

'Adjust width of columns
Set objRange = objWorksheet1.UsedRange
objRange.EntireColumn.Autofit()
'This code could be used to AutoFit a select number of columns
'For intColumns = 1 To 17
' objExcel.Columns(intColumns).AutoFit()
'Next

'Make Headings Bold
objExcel.Rows(1).Font.Bold = TRUE

'Freeze header row
With objExcel.ActiveWindow
.SplitColumn = 0
.SplitRow = 1
End With
objExcel.ActiveWindow.FreezePanes = True

'Add Data Filters to Heading Row
objExcel.Rows(1).AutoFilter

'set header row gray
objExcel.Rows(1).Interior.ColorIndex = 15
'-0.249977111117893

'Save Spreadsheet, 51 = Excel 2007-2010 
objWorksheet1.SaveAs tgtxlsfile, 51

'Release Lock on Spreadsheet
objExcel.Quit()
Set objWorksheet1 = Nothing
Set objWorkbook = Nothing
Set ObjExcel = Nothing

After entering the above script, you need to save the file with the .vbs file extension. For that, click on the File > Save As option. In the Save As dialog prompt, set Save As Type to All Files and then enter the filename followed by the .vbs file extension. After that, click on the Save button to save the VBS file.

Now, go to the folder where you have saved the above VBS script and open Command Prompt in this folder.

Next, you have to enter a command with the below syntax in CMD:

VBSFilename [Input CSV file with path] [Output Excel file with path]

Let’s say you have named the VBS file as “csv-to-excel”, then your command will look something like the below one:

csv-to-excel C:UsersKOMALDesktoptwc.csv C:UsersKOMALDesktoptwc1.xlsx

In case you want to create an Excel file with the older file extension i.e., XLS, just replace xlsx with xls. Here is an example:

csv-to-excel C:UsersKOMALDesktoptwc.csv C:UsersKOMALDesktoptwc1.xls

Do remember that you have to mention the full path of both input CSV and output Excel files.

How to Convert CSV to Excel (XLS or XLSX) using Command line in Windows 10

As you enter the above command, you will get the output Excel file.

Convert CSV to Excel using Command line

In the above VBScript, there are options to adjust column width, freeze pane, apply filter, make header bold, etc. You can easily tweak the VBScript to customize these options and then run the command to convert CSV to Excel through CMD. If you are a programmer, you can further customize the script accordingly.

So, this is how you can convert CSV to Excel using Command-Line with help of a VBScript created by Jeff.

Related reads:

  • How to convert DBF to Excel in Windows
  • How to convert a Text (TXT/CSV) file into an Excel file
  • Free Batch PDF to Excel Converter Software.

Ezoic

Komal has done M.Tech in Computer Science & Engineering. She is a keen follower of the Windows ecosystem & a technical writer since the last six years. She loves finding solutions for day-to-day tech problems.

Like this post? Please share to your friends:
  • Vbs работа с word
  • Vbs работа с excel
  • Vbs как открыть excel файл
  • Vbs open excel file
  • Vbs excel save as