Страницы: 1 2 3 След.
RSS
Перевод отчета из одного формата в другой
 
Всем привет!  
 
Помогите, пожалуйста, в решении такой задачки!  
Есть отчет с данными (в отчете шапка с данными и таблица с данными), нужно определенные данные перенести в столбцы отчета формата csv.  
 
Как это реализовать?  
Подскажите, пожалуйста!
 
Извини.  
 
В приложении два файла. Нужно из файла Пример.txt получить Пример1.csv с разделителем запятая (то есть при открытии этого файла  в текстовом редакторе, данные столбцов должны идти через точку с запятой).  
 
Помоги, пожалуйста!
 
каждый раз создавать новый(для каждого txt-файла свой csv)
 
Я бы это без Экселя делал, скриптом vbs.  
Имена текстовых файлов одинаковые/разные/с_общей_частью ?
 
Да, может этих текстов много в папке и надо просто тупо перебрать все и напарсить csv?
 
этих текстов может быть много в папке (перебрать все и напарсить csv)
 
Вот моё, код vbs - сохранить как *.vbs.  
Файлы пока не перебирает.  
Пути подрпавьте под свои.  
 
Sub parser_()  
Dim countline As Long  
Dim objFSO  
 
Set objFSO = CreateObject("Scripting.FileSystemObject")  
Const ForReading = 1  
Const ForWriting = 2  
 
'# Диалог открытия файла  
 
If objFSO.FileExists("C:\temp\Natalija\пример.txt") Then  
  Set objTextFile = objFSO.OpenTextFile("C:\temp\Natalija\пример.txt", 1)  
Else  
  '# Диалог открытия файла  
  Set objDialog = CreateObject("UserAccounts.CommonDialog")  
  objDialog.Filter = "TXT Files|*.txt|All Files|*.*"  
  objDialog.FilterIndex = 1  
  objDialog.InitialDir = "C:\temp\Natalija\"  
  intResult = objDialog.ShowOpen  
  If intResult = 0 Then Wscript.Quit  
  Set objTextFile = objFSO.OpenTextFile(objDialog.Filename, ForReading)  
End If  
 
Set objFile = objFSO.CreateTextFile("C:\temp\Natalija\test.csv")  
objFile.Close  
Set objFile = objFSO.OpenTextFile("C:\temp\Natalija\test.csv", ForWriting)  
 
Do Until objTextFile.AtEndOfStream 'пока не кончился файл  
 strNextLine = objTextFile.Readline 'читаем посторочно  
countline = countline + 1  
Select Case countline  
Case 1: objFile.WriteLine "Дата отчета;Наименование отчета;Дата подписи;Адрес;Наименование прибора;Дата закупки;Стоимость"  
Case 3: dataotceta = Mid(strNextLine, 4, 10)  
Case 4: naimen = Trim(Mid(strNextLine, 14, 100))  
Case 5: data = Mid(strNextLine, 7, 10)  
Case 6: adres = Trim(Mid(strNextLine, 8, 100))  
Case Is > 10  
If Len(strNextLine) = 0 Then Exit Do  
If Left(strNextLine, 1) <> "_" And Left(strNextLine, 1) <> " " Then  
pribor = Trim(Left(strNextLine, InStr(strNextLine, "|") - 1))  
datazakupki = Trim(Mid(strNextLine, InStr(strNextLine, "|") + 1, 11))  
stoimostj = Trim(Mid(strNextLine, InStr(strNextLine, "|") + 17, 20))  
stoimostj = Replace(stoimostj, "|", "")  
objFile.WriteLine dataotceta & ";" & naimen & ";" & data & ";" & adres & ";" & pribor & ";" & datazakupki & ";" & stoimostj  
End If  
End Select  
Loop  
objFile.Close  
 
End Sub
 
Спасибо тебе большое! Сижу разбираюсь в коде.  
 
 
Расшифруй, пожалуйста, за что отвечают sTxt, Trim$,lPoz, Instr, что означают цифры (3,4, 13, 14, 5, 6,6, 7)  
 
  If Left$(sTxt, 3) = "За " Then dDateRep = Trim$(Mid(sTxt, 4))  
           'Наименование отчета  
           If Left$(sTxt, 13) = "Наименование:" Then sNaimRep = Trim$(Mid(sTxt, 14))  
           'Дата подписи  
           If Left$(sTxt, 5) = "Дата:" Then dDatePod = Trim$(Mid(sTxt, 6))  
           'Адрес  
           If Left$(sTxt, 6) = "Адрес:" Then sAddr = Trim$(Mid(sTxt, 7))  
           lPoz = InStr(1, sTxt, "|", 1)  
 
Можно ли задать еще формат столбцам G:G - числовой формат, A:A и C:C - формат дата?  
 
А что будет, если шапка съедет на несколько строк выше или ниже?  
 
Объясни, пожалуйста!
 
{quote}{login=Hugo}{date=04.08.2010 04:20}{thema=}{post}Вот моё, код vbs - сохранить как *.vbs.  
Файлы пока не перебирает.  
 
End Sub{/post}{/quote}  
 
Спасибо тебе большое!
 
Извиняюсь, это макрос, что-то закрутился... Для vbs надо переделать чуток :)
 
{quote}{login=The_Prist}{date=04.08.2010 03:56}{thema=}{post}Держите.{/post}{/quote}  
 
Спасибо тебе большое!  
Расшифруй, пожалуйста! Сообщение было написано ранее.
 
Парсер в vbs приложил.  
Там кстати ошибка в примерах - исходно сканер 250000 руб, а в csv уже 2500000 руб
 
Спасибо вам, ребята, большое!  
 
Дмитрий, подскажи, пожалуйста!  
 
А как прописать условие для столбцов покупка-продажа?  
Условие:  
просматриваем напротив товара (например, принтер)два столбца (покупка и продажа),если в одной из двух ячеек встречается цифра, отличная от нуля или пустой ячейки, то в переменную TipOperacii в столбец 9 записываем название столбца (покупка или продажа), в котором найдено это значение,    
 
а само значение записываем в столбец 10 в переменную Kolvo    
т.е. Cells(lLastRow, 10) = Kolvo  
 
В столбец 11 записываем сумму значений ячеек столбцов Покупка и продажа  
 
 
Помоги, пожалуйста, разобраться в этом!
 
А также, чтобы в отчет не попадала строчка таблицы ИТОГО
 
и как захватить данные после таблицы?
 
Дима, помоги, пожалуйста, прописать условие и захватить данные после таблицы!  
 
После таблицы есть данные, которые нужно использовать и как константу прописать сумму Комиссии за проведение и НДС на комиссию
 
Дим, прости меня!  
Просто вчера была одна задача и один вид отчета, сегодня он модернизировался и я запуталась, появилась задача не только просто вытащить данные, но и реализовать условие.  
 
Прости меня, я больше не буду. НЕ ругайся , пожалуйста!  
Мне нужна твоя помощь, мне очень нужно разобраться!
 
Да, текст поменялся кардинально.  
А мне мой подход больше нравится - читаем построчно и пишем в новый текстовый файл, вставляя после каждого поля ";".  
И при анализе строки можно использовать любые условия.  
Если нашлось "Комиссия за проведение:" - одно действие,  
"НДС на комиссию" - другое,  
"Директор" - конец работе :)  
 
If Left(strNextLine, 1) <> "_" And Left(strNextLine, 1) <> " " Then  
pribor = Trim(Left(strNextLine, InStr(strNextLine, "|") - 1))  
datazakupki = Trim(Mid(strNextLine, InStr(strNextLine, "|") + 1, 11))  
stoimostj = Trim(Mid(strNextLine, InStr(strNextLine, "|") + 17, 20))  
stoimostj = Replace(stoimostj, "|", "")  
objFile.WriteLine dataotceta & ";" & naimen & ";" & data & ";" & adres & ";" & pribor & ";" & datazakupki & ";" & stoimostj  
End If
 
Да, и ";Наименование отчета;" вообще больше нет...
 
И там выше прозвучал вопрос про числовой формат и про даты - csv это ведь текст, какие там форматы?
 
В примере отчет2.xls то, что должно получиться из текстового файла
 
{quote}{login=Natalia}{date=05.08.2010 05:22}{thema=}{post}В примере отчет2.xls то, что должно получиться из текстового файла{/post}{/quote}  
 
только вместо xls должно быть csv
 
Вот тут непонятно, хотя догадываюсь:  
sss Комиссия Общая комиссия  
1929.95 39.37 11.85  
равна сумме значений столбцов "Комиссия1" и  "НДС"
 
Разобрался. Сделал макросом и vbs. Исходил из того, что файл генерится скриптом, и все файлы должны быть однотипными - т.е. таблица по ширине и высоте ячеек не меняется, позиция последних символов остатков тоже неизменна.  
Имя директора начинается после "Директор        " - тут может надо скорректировать, если не будет находить. Пробел для того, чтобы не путать с возможным словом "Директор" в описании.  
По-моему, код должен быть понятен.  
Подход немного другой - сперва определяю дату, директора и остатки, а уж затем ищу нужные строки, в массиве строк.
 
Забыл об особенности форума - там в коде после "Директор " пробелов побольше, с запасом :)
 
Спасибо, а как быть, если описание предмета переходит на две строки и в таблице тогда получаются граничные линии по бокам из двух черточек?
 
Такой вариант я подозревал, но не рассматривал. В следующий раз давайте пример с по возможности всеми возможными вариантами. Надо подумать...
 
Вот, добавил анализ ячейки, где время. Если там пусто, такую строку не рассматриваем. Версия тольк vbs, в макрос изменения внесите сами.  
Вообще там ещё надо добавить перебор всех файлов, выбор папки и т.д. для работы, это пока тестовые версии, но рабочие.
 
Вот пример  
 
А можно ли, чтобы он еще в столбцы N, O, P записывал разделяя название предмета, то есть, в N - писал первое слово (принтер), в столбец O  - Липецкой обл.34004 до запятой и в P - то, что после запятой. А в столбец R константу "0" (ноль)
 
Мой подход с новым файлом полностью рушится...  
Столбцы поплыли и вширь, и ввысь, правда меня касается теперь только ширь...  
Что генерит эти файлы? Там есть постоянство?
Страницы: 1 2 3 След.
Читают тему
Наверх