Автор Тема: Поиск значений в txt файле и запись в таблицу Excel  (Прочитано 229 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Эта тема содержит сообщение, помеченное как лучший ответ. Кликните здесь для перехода к этому сообщению.

Оффлайн Maggot_515 [?]

  • Новичок
  • *
  • Сообщений: 11
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Версия AutoIt: 3.3.14.5

Описание:
Имеется неограниченное количество txt файлов с записями формата JSON и таблица Excel.
Задача программы вытащить из каждого файла определенные значения (какие описывать не буду т.к это работает) и записать их в заранее созданную таблицу Excel. Из каждого файла txt берется месяц покупки в текстовом виде и создается одноименный лист в этот лист записываются все остальные значения txt файла.

Что не получается сделать:

*Если попадается файл с покупкой этого же месяца его надо дописать в существующий лист отступив от последнего столбца 2 столбца и продолжить запись новых значений и т.д. Пример последняя запись была сделана в столбце E , значит следующая столбец H.

*Под каждым столбцом Сумма необходимо вставить формулу =Сумм(меняющийся диапазон)

*Значение столбцов Цена и Сумма надо разделить на 100

Код: AutoIt [Выделить]
#include <Excel.au3>
#include <File.au3>
#include <Array.au3>
#include <MsgBoxConstants.au3>
#include <Date.au3>



$pattern = '(?i).*?\Q"dateTime" : "\E(.+?)".*' ; Дата чека
$pattern1 = '(?i).*?\Q"name" : "\E(.+?)",.*' ;Наименование
$pattern1_ = '(?i).*?\Q"name": "\E(.+?)",.*' ;Наименование_
$pattern2 = '(?i).*?\Q"quantity" : \E(.+?)\D\s.*?' ;Колличество
$pattern2_ = '(?i).*?\Q"quantity": \E(.+?)\D\s.*?' ;Колличество_
$pattern3 = '(?i).*?\Q"price" : \E(.+?)\D\s.*?' ;Цена
$pattern3_ = '(?i).*?\Q"price": \E(.+?)\D\s.*?' ;Цена_
$pattern4 = '(?i).*?\Q"sum" : \E(.+?)\D\s.*?' ;Сумма
$pattern4_ = '(?i).*?\Q"sum": \E(.+?)\D\s.*?' ;Сумма_

Local $aArray = _FileListToArrayRec(@ScriptDir, "*.txt", $FLTAR_RECUR, $FLTAR_SORT) ; $FLTAR_RECUR (1) - Search in all subfolders (unlimited recursion) $FLTAR_SORT - сортировка без нее не работает

;_ArrayDisplay($aArray, "Sorted tree", 32)

For $i = 1 To $aArray[0]
$sArray = $aArray[$i]
$hFile = FileOpen($sArray, 0)
$sText = FileRead($hFile)
FileClose($hFile)

$aRes = StringRegExp($sText, $pattern, 1) ; флаг=3, возвращает все найденные группы
$s = _ArrayToString($aRes)
$DataTime = StringRegExpReplace($s, '(\d{4})-(\d{2})-(\d{2})T', ' $3.$2.$1 ')
$Mounth = StringRegExpReplace($s, '(\d{4})-(\d{2})-(\d{2})T.*', '$2')
$sLongMonthName = _DateToMonth($Mounth)

;MsgBox(4096, "$DataTime", $DataTime)

;MsgBox(4096, "$Mounth", $sLongMonthName)

$avArraySource1 = 'НАИМЕНОВАНИЕ'
$aRes1 = StringRegExp($sText, $pattern1, 3) ; флаг=3, возвращает все найденные группы
If @error Then   $aRes1 = StringRegExp($sText, $pattern1_, 3) ; флаг=3, возвращает все найденные группы
_ArrayInsert($aRes1, 0, $avArraySource1)


;_ArrayDisplay($aRes1, "$aRes1") ; функция для просмотра массива



$avArraySource2 = 'КОЛ-ВО'
$aRes2 = StringRegExp($sText, $pattern2, 3) ; флаг=3, возвращает все найденные группы
If @error Then $aRes2 = StringRegExp($sText, $pattern2_, 3) ; флаг=3, возвращает все найденные группы
   _ArrayInsert($aRes2, 0, $avArraySource2)


;_ArrayDisplay($aRes2, "$aRes2") ; функция для просмотра массива



$avArraySource3 = 'ЦЕНА'
$aRes3 = StringRegExp($sText, $pattern3, 3) ; флаг=3, возвращает все найденные группы
_ArrayInsert($aRes3, 0, $avArraySource3)

;_ArrayDisplay($aRes3, "$aRes3") ; функция для просмотра массива

$avArraySource4 = 'СУММА'
$avArraySource4_ = '=СУММ(E4:E46)'
$aRes4 = StringRegExp($sText, $pattern4, 3) ; флаг=3, возвращает все найденные группы
If @error Then $aRes4 = StringRegExp($sText, $pattern4_, 3)
_ArrayInsert($aRes4, 0, $avArraySource4)
_ArrayAdd($aRes4, $avArraySource4_)


;_ArrayDisplay($aRes4, "$aRes4") ; функция для просмотра массива


; Create application object and open an example workbook
Local $oExcel = _Excel_Open()
If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_SheetAdd Example", "Error creating the Excel application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
Local $oWorkbook = _Excel_BookOpen($oExcel, @ScriptDir & "\Extras\_Excel1.xlsx")
If @error Then
    MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_SheetAdd Example", "Error opening workbook '" & @ScriptDir & "\_Extras\Excel1.xlsx'." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    _Excel_Close($oExcel)
    Exit
EndIf
Sleep(100)
_Excel_SheetAdd ($oWorkbook, -1, False, 1, $sLongMonthName)
If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_SheetAdd Example 1", "Error adding sheets." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
;MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_SheetAdd Example 1", "Two sheets added after the last one.")
Sleep(100)
$Formula = '=СУММ(E4:E46)'
_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $aRes1, "B3")
_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $aRes2, "C3")
_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $aRes3, "D3")
_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $aRes4, "E3")
;$oWorkbook.ActiveSheet.Cells(50,5).Formula = $Formula
Sleep(100)
_Excel_BookSave($oWorkbook)

Next


 


содержимое txt файлов

1-й
(нажмите для показа/скрытия)

2-й
(нажмите для показа/скрытия)

Примечания:  p.s для проверки работы программы создать Extras\_Excel1.xlsx
« Последнее редактирование: Ноябрь 05, 2018, 20:10:56 от Maggot_515 »

Русское сообщество AutoIt

Поиск значений в txt файле и запись в таблицу Excel
« Отправлен: Ноябрь 05, 2018, 20:00:49 »

Оффлайн ra4o [?]

  • Скриптер
  • ****
  • Сообщений: 811
  • Репутация: 145
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Цитировать
Если попадается файл с покупкой этого же месяца его надо дописать в существующий лист...
хорошо бы и пример такого файла, что-бы самому не изобретать.

Оффлайн Maggot_515 [?]

  • Новичок
  • *
  • Сообщений: 11

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Вот еще за Октябрь. Если есть возможность надо избавиться от добавления повторных записей т.е если txt файл с таким же содержанием но с другим именем попадется в дальнейшем то запись не будет производится в таблицу Excel. (но это не критично)
(нажмите для показа/скрытия)

Помечен как лучший ответ пользователем Maggot_515 Отправлен Ноябрь 08, 2018, 18:09:35

Оффлайн ra4o [?]

  • Скриптер
  • ****
  • Сообщений: 811
  • Репутация: 145
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Чуть доработал ваш скрипт, так ?
(нажмите для показа/скрытия)

Русское сообщество AutoIt

Re: Поиск значений в txt файле и запись в таблицу Excel
« Ответ #3 Отправлен: Ноябрь 06, 2018, 21:00:51 »

Оффлайн Maggot_515 [?]

  • Новичок
  • *
  • Сообщений: 11

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Спасибо  :beer: Ваш скрипт сходу не запустился , но идею понял исправил то что надо было. Все работает на ура.  :rofl: По оформлению Excel "пните" в нужном направлении. Надо смаштабировать столбец с Наименованием, сделать жирным шрифтом заголовки, сделать границы таблицы черными, там где сумма сделать шрифт красным.

Оффлайн ra4o [?]

  • Скриптер
  • ****
  • Сообщений: 811
  • Репутация: 145
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Цитировать
По оформлению Excel "пните" в нужном направлении.
Смотрите в сторону СОМ объекта Excel , например:
Код: AutoIt [Выделить]
$oExc.Range('A1:G8' ).Borders.LineStyle = 1 ;Стиль таблицы - сплошная линия
$oExc.Columns('A:G').EntireColumn.AutoFit ;Автоподбор ширины колонок A-G
итд
 

по поводу цвета посмотрите :http://autoit-script.ru/index.php?topic=22502.msg131370#msg131370

Русское сообщество AutoIt

Re: Поиск значений в txt файле и запись в таблицу Excel
« Ответ #5 Отправлен: Ноябрь 08, 2018, 19:28:49 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
2 Ответов
6233 Просмотров
Последний ответ Декабрь 28, 2010, 09:19:53
от gregaz
2 Ответов
9104 Просмотров
Последний ответ Февраль 21, 2011, 13:55:54
от frazier1979
0 Ответов
3551 Просмотров
Последний ответ Февраль 21, 2011, 14:08:18
от `p r o x y
4 Ответов
2934 Просмотров
Последний ответ Июль 24, 2012, 22:36:29
от madmasles
17 Ответов
9088 Просмотров
Последний ответ Май 16, 2014, 15:18:37
от bcxtim
7 Ответов
3876 Просмотров
Последний ответ Март 19, 2014, 20:58:08
от eus_deus
1 Ответов
1408 Просмотров
Последний ответ Октябрь 21, 2015, 10:03:23
от madmasles
3 Ответов
1148 Просмотров
Последний ответ Декабрь 18, 2015, 19:16:11
от ra4o
5 Ответов
1265 Просмотров
Последний ответ Октябрь 17, 2017, 21:41:29
от Tempo
0 Ответов
47 Просмотров
Последний ответ Вчера в 22:59:24
от Maggot_515