Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Текст по столбцам. Excel. VBS

Ответить
Настройки темы
VBS/WSH/JS - [решено] Текст по столбцам. Excel. VBS

В Поисках Истины


Сообщения: 802
Благодарности: 135


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: LilLoco
Дата: 30-10-2012
Добрый день, Уважаемые.

Столкнулся с проблемой. Vbs пока что только осваиваю, поэтому прошу сильно не пинать.
В общем имеется текстовый файл с такой структурой:
PHP код: Выделить весь код

25/10/2012;08:57:49;37.4639600;55.8085733;15 
25
/10/2012;08:57:50;37.4639600;55.8085733;15 
25
/10/2012;08:57:51;37.4639600;55.8085733;18
................................................................................ 

где первая и вторая колонка - дата и время соответственно.
Файл довольно большой, порядка 100000 строк и более.
Средствами VBS этот файл открывается в Excel (2010), и при помощи
Код: Выделить весь код
Dim app
Set app = CreateObject("Excel.Application")
...........
app.Selection.TextToColumns app.ActiveSheet.Range("A1"), 1, 1, 0, 0, 0, 0, 0, 1, ";"'нашел где то в просторах интернета
разбивается на столбцы.
При этом первый столбец не меняет формат на "Дата". Да и при любом формате, уже вручную, остается без изменений.
Если же все сделать ручками в экселе, то при разбивке строк на колонке все хорошо работает.
Думаю причиной всему являются параметры процедуры TextToColumns, но пока не могу определить конкретику.
Поэтому прошу Вас помочь мне.
Заранее благодарен.

ай, ай, ай. Не в той ветке создал( перенесите пожалуйста!

-------
foreach(short w in new short[] {73,3,79,83,90,79,78,69}){
Console.Write((char)w);
}


Отправлено: 12:16, 30-10-2012

 

Ветеран


Contributor


Сообщения: 25402
Благодарности: 7376

Профиль | Отправить PM | Цитировать


Цитата LilLoco:
Средствами VBS этот файл открывается в Excel (2010), »
1. Как именно открывается? Приведите весь значимый код.
2. Вам нужно открыть именно из WSH в Excel? Какова конечная цель? Что планируется делать с этими данными далее?

Отправлено: 22:28, 30-10-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


В Поисках Истины


Сообщения: 802
Благодарности: 135

Профиль | Отправить PM | Цитировать


Цитата Iska:
Приведите весь значимый код »
Код: Выделить весь код
Const FileNameLog = "D:\1\log.txt"
Const FileNameSave = "D:\1\log.xlsx"

Dim app, book

Set app = WScript.CreateObject("Excel.Application")
app.Visible = true
Set book = app.Workbooks.Open(FileNameLog)

app.ActiveSheet.Columns("A:A").Select
app.Selection.TextToColumns app.ActiveSheet.Range("A1"), 1, 1, 0, 0, 0, 0, 0, 1, ";"



app.ActiveSheet.Columns("B:B").Select
app.Selection.NumberFormat = "[$-F400]h:mm:ss AM/PM"

app.ActiveSheet.UsedRange.Select

book.SaveAs FileNameSave,51

Set book = Nothing
app.DisplayAlerts = false
app.Quit
app.DisplayAlerts = true
Set app = Nothing
Вот в принципе весь код для этого текстового файла.

Цитата Iska:
Какова конечная цель? »
Конечная цель заключается в том, что из 2х текстовых файлов создается 2 документа excel, из которых, в последующем, по средствам запросов "сопоставляются" данные из первого файла и из второго(по полям дат).

Попробовал сделать все вручную, записав при этом макрос. При действиях руками,- все работает. Но с этими же данными, но при помощи записанного макроса, так же не работает.

-------
foreach(short w in new short[] {73,3,79,83,90,79,78,69}){
Console.Write((char)w);
}


Отправлено: 08:32, 31-10-2012 | #3


Ветеран


Contributor


Сообщения: 25402
Благодарности: 7376

Профиль | Отправить PM | Цитировать


Коллега, не представляю, как Вы пробовали записывать макрос, если от него ничего в коде не осталось.

Пробуйте:
читать дальше »
Код: Выделить весь код
Option Explicit

Const xlDelimited = 1
Const xlDoubleQuote = 1
Const xlNormal = &HFFFFEFD1


Dim strFileNameLog
Dim strFileNameSave

Dim objWorkbook


strFileNameLog  = "D:\1\log.txt"
strFileNameSave = "D:\1\log.xlsx"

With WScript.CreateObject("Excel.Application")
	.Workbooks.OpenText strFileNameLog, 1251, 1, xlDelimited, xlDoubleQuote, _
		False, False, True, False, False, False, False, _
		Array(Array(1, 4), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1))
		
	For Each objWorkbook In .Workbooks
		If objWorkbook.FullName = strFileNameLog Then
			With objWorkbook
				.SaveAs strFileNameSave, xlNormal
				.Close
			End With
			
			Exit For
		End If
	Next
	
	.Quit
End With

WScript.Quit 0


Цитата LilLoco:
Конечная цель заключается в том, что из 2х текстовых файлов создается 2 документа excel, из которых, в последующем, по средствам запросов "сопоставляются" данные из первого файла и из второго(по полям дат). »
Может, есть смысл делать это сразу? Или там больше «ручное» сравнение?
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:34, 31-10-2012 | #4


В Поисках Истины


Сообщения: 802
Благодарности: 135

Профиль | Отправить PM | Цитировать


Цитата Iska:
Может, есть смысл делать это сразу? »
Может и есть, но в голову ничего больше не пришло к сожалению.

Цитата Iska:
Коллега, не представляю, как Вы пробовали записывать макрос, если от него ничего в коде не осталось. »
Начал запись, сделал "текст по столбцам", закончил запись. Там был код. Я что - то не так сделал?(

-------
foreach(short w in new short[] {73,3,79,83,90,79,78,69}){
Console.Write((char)w);
}


Последний раз редактировалось LilLoco, 31-10-2012 в 11:09.


Отправлено: 10:43, 31-10-2012 | #5


Ветеран


Contributor


Сообщения: 25402
Благодарности: 7376

Профиль | Отправить PM | Цитировать


Цитата LilLoco:
Начал запись, сделал "текст по столбцам", закончил запись. Там был код. Я что - то не так сделал?( »
Угу. Запустил Microsoft Excel. Создал пустую книгу (если не было). Начал запись макроса. \Файл\Открыть (я, понятно, для пред-2007-х версий описываю), выбрал текстовый файл, ответил на вопросы по импорту. После открытия файла закончил запись макроса. Нажал Alt-F11, открыл в первой, пустой книге полученный модуль с записанным кодом. Перевёл с VBA на WSH.

Цитата LilLoco:
Может и есть, но в голову ничего больше не пришло к сожалению. »
А то, смотрите — если запросы, то можно и непосредственно из текстовых файлов попробовать извлекать и связывать данные, представляя их как таблицы базы данных: «select … from … inner join … where … order …» и т.п.
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:59, 31-10-2012 | #6


В Поисках Истины


Сообщения: 802
Благодарности: 135

Профиль | Отправить PM | Цитировать


Iska, Огромное спасибо все работает.

Еще такой вот вопрос.
Для даты используется формат даты (xlDMYFormat = 4), а если колонка содержит дату и время (дд/ММ/гггг чч:мм:сс), какой формат при этом необходимо использовать?

Цитата Iska:
непосредственно из текстовых файлов попробовать извлекать и связывать данные, представляя их как таблицы базы данных »
Буду искать, изучать. Так было бы конечно же лучше. Спасибо за наводку)

-------
foreach(short w in new short[] {73,3,79,83,90,79,78,69}){
Console.Write((char)w);
}


Отправлено: 11:10, 31-10-2012 | #7


Ветеран


Contributor


Сообщения: 25402
Благодарности: 7376

Профиль | Отправить PM | Цитировать


Цитата LilLoco:
Для даты используется формат даты (xlDMYFormat = 4), »
Где? В моём коде нет такого.

Цитата LilLoco:
а если колонка содержит дату и время (дд/ММ/гггг чч:мм:сс), какой формат при этом необходимо использовать? »
Так у Вас же не содержит. У Вас два поля, разделённых «;», отдельно дата и отдельно время.

Отправлено: 11:24, 31-10-2012 | #8


В Поисках Истины


Сообщения: 802
Благодарности: 135

Профиль | Отправить PM | Цитировать


Цитата Iska:
Где? В моём коде нет такого. »
Цитата Iska:
Array(Array(1, 4), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1)) »
Разве это не оно?

Цитата Iska:
Так у Вас же не содержит »
Это в этом файле. Есть другие, где содержатся такие даты

-------
foreach(short w in new short[] {73,3,79,83,90,79,78,69}){
Console.Write((char)w);
}


Отправлено: 11:39, 31-10-2012 | #9


Ветеран


Contributor


Сообщения: 25402
Благодарности: 7376

Профиль | Отправить PM | Цитировать


Цитата LilLoco:
Разве это не оно? »
Оно. Я просто глазами всё искал именно упомянутую мнемоническую константу.

Цитата LilLoco:
Это в этом файле. Есть другие, где содержатся такие даты »
LilLoco, надо пробовать — в принципе, сам формат дата/время поддерживается. Можете выложить часть файла, как делали это выше.

Отправлено: 21:01, 31-10-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Текст по столбцам. Excel. VBS

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBA - Помогите написать макрос в Excel, экспорт данных из Excel в Word. E.v.g Программирование и базы данных 7 03-05-2018 22:18
2010 - При отправке любого офисного (Word, PP, Excel) файла из писем исчезает текст Terrapevt Microsoft Office (Word, Excel, Outlook и т.д.) 1 12-05-2012 20:32
2007 - Текст в Excel 2007 jazzanova Microsoft Office (Word, Excel, Outlook и т.д.) 5 12-04-2011 22:25
CMD/BAT - С помощью bat-ника найти и заменить текст в файле на текст из другого файла Nun-Nun Скриптовые языки администрирования Windows 1 08-03-2011 15:25
[решено] Сортировка данных ListView по столбцам malev AutoIt 3 16-10-2009 17:53




 
Переход