- 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 desktopbut 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
-
Edited by
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
-
Marked as answer by
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
6,08516 gold badges51 silver badges57 bronze badges
asked Jul 4, 2013 at 7:50
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 theSaveChanges
parameter set toTrue
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 toTrue
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
answered Jul 4, 2013 at 8:42
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 needfso
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
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
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 строке ошибку находит
0 |
8 / 8 / 1 Регистрация: 09.10.2013 Сообщений: 613 |
|
12.02.2015, 11:34 [ТС] |
5 |
Surrogate,
а в vbs в 25 строке ошибку находит так код из 16 строк состоит, который Вы мне скинули
0 |
Surrogate Ушел с CyberForum совсем! 873 / 182 / 25 Регистрация: 04.05.2011 Сообщений: 1,020 Записей в блоге: 110 |
||||
12.02.2015, 11:48 |
6 |
|||
попробуй этот, что не идет в vbs
0 |
adb420 8 / 8 / 1 Регистрация: 09.10.2013 Сообщений: 613 |
||||
12.02.2015, 12:01 [ТС] |
7 |
|||
Surrogate, что то все равно не так работает. из под vba, не понятно куда сохраняет(не сохраняет в ту папку, где был открыт файл эксель), из под vbs ругается на 26 строку
убрал :, оставил просто =, ругаться перестал, но и не сохраняет тоже
0 |
Surrogate Ушел с CyberForum совсем! 873 / 182 / 25 Регистрация: 04.05.2011 Сообщений: 1,020 Записей в блоге: 110 |
||||
12.02.2015, 13:16 |
8 |
|||
Сообщение было отмечено adb420 как решение Решениедумаю это излишне закрывать открытую книгу экселя. это мой второй опыт работы с VBS
вроде работает
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 |
|||
надеюсь на помощь и в этих двух вопросах!) Не по теме: надеюсь кто-нибудь еще откликнется, сегодня я уже не помошник Добавлено через 3 часа 13 минут
Добавлено через 11 минут
0 |
17992 / 7618 / 890 Регистрация: 25.12.2011 Сообщений: 11,351 Записей в блоге: 17 |
|
24.02.2015, 19:22 |
11 |
Surrogate,
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 |
Результат работы скрипта:
Помогла ли вам данная статья, ответьте в комментариях.
Загрузка…
Страницы 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, strAllTextIf 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 IfSet objFile = objFSO.CreateTextFile(strFolderPath & «AllTextFiles.txt»)
objFile.Write strAllText
objFile.Close
End SubMsgBox «Результирующий файл сформирован»
Set objFSO = Nothing
Wscript.quitFunction ReadFile(strTempFilePath)
On Error Resume NextDim objTempFile, strText
Set objTempFile = objFSO.OpenTextFile(strTempFilePath, 1, False)
strText = objTempFile.Readall
objTempFile.CloseReadFile = 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 desktopbut 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
-
Edited by
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
-
Marked as answer by
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:
- Open Notepad.
- Write a Visual Basic Script (VBS).
- Save the VBS file.
- Open Command Prompt in the folder.
- 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.
As you enter the above command, you will get the output Excel file.
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.
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.