Что нового

Перебрать значение строки Еxel и записать в шаблон

Bingo888

Новичок
Сообщения
36
Репутация
0
Добрый день! Есть следующая ситуация :
Есть пример шаблона который заполняется данными с Еxel таблицы.
Проблема заключается в том что шаблон состоит из двух одинаковых кусков в которых определённые ячейки должны заполница с 1 и 2 строки Еxel и потом уже сохранить это и брать соответствено 3 и 4 строку и так далие пока d таблице с данными не появится пустая строка. Как это организовать? Помогите пожалуйста, вот мой код:
Код:
; -- Created with ISN Form Studio 2 for ISN AutoIt Studio -- ;
#include <StaticConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <GuiButton.au3>
#include <GuiTab.au3>
#include <ProgressConstants.au3>
#include <Array.au3>
#include <Excel.au3>
#include <File.au3>
#include <AutoItConstants.au3>
#include <GUIStatusBar.au3>


$ini = @ScriptDir & "\119.ini"
$sDPI=IniRead($ini,'Settings','DPI','')
$sindex_DPI=IniRead($ini,'Settings','index_DPI','')
$sobl_DPI=IniRead($ini,'Settings','obl_DPI','')
$sray_DPI=IniRead($ini,'Settings','ray_DPI','')
$snas_p_DPI=IniRead($ini,'Settings','nas_p_DPI','')
$svul_DPI=IniRead($ini,'Settings','vul_DPI','')
$sbud_DPI=IniRead($ini,'Settings','bud_DPI','')



$POHTA = GUICreate("ПОЧТА@2112",344,255,-1,-1,-1,-1)
$tab = GUICtrlCreatetab(0,0,353,354,-1,-1)
GuiCtrlSetState(-1,2048)
GUICtrlCreateTabItem("Заповнення повідомлень")
GUICtrlCreateTabItem("Формування реєстру")
GUICtrlCreateTabItem("Данні автора")
GUICtrlCreateTabItem("")
_GUICtrlTab_SetCurFocus($tab,-1)
GUISwitch($POHTA,_GUICtrlTab_SetCurFocus($tab,0)&GUICtrlRead ($tab, 1))
 GUICtrlCreateLabel("Формування повідомлень Ф.119",39.5,36,265,22,-1,-1)
GUICtrlSetFont(-1,14,700,0,"Times New Roman")
GUICtrlSetBkColor(-1,"-2")
$Button_1 = GUICtrlCreateButton("СФОРМУВАТИ Ф.119",101,80,142,33,-1,-1)
GUICtrlSetFont(-1,10,700,0,"Times New Roman")
GUICtrlSetColor(-1,"0xFF0000")
GUICtrlSetBkColor(-1,"0x80FF80")
;GUICtrlCreateProgress(21,212,291,20,-1,-1)
GUICtrlCreateButton("Сформувати 'Адресата'",101,122,142,30,-1,-1)
GUICtrlSetFont(-1,10,700,0,"Times New Roman")
GUICtrlCreateButton("ДРУК",101,162,142,30,-1,-1)
GUICtrlSetFont(-1,10,700,0,"Times New Roman")
_GUICtrlTab_SetCurFocus($tab,0)
$status = _GUICtrlStatusBar_Create($POHTA)
_GUICtrlStatusBar_SetText($status, 'Сформовано :')
GUISetState(@SW_SHOW,$POHTA)



While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
Case $Button_1

;Example()
Local $oExcel = _Excel_Open(False);откриваем Excel
Local $sWorkbook = @ScriptDir & "\Adresa.xls";путь к книге Excel
Local $oWorkbook = _Excel_BookOpen($oExcel, $sWorkbook);откриваем книгу Excel
Local $Result = _Excel_RangeRead($oWorkbook);помещае содержимое в масив
;_ArrayDisplay($Result);выводим масив на екран


Global $name[UBound($Result)];обявляем переменную ПИБ
Global $m_p[UBound($Result)];обявляем переменную "Место нахождение"
Global $index[UBound($Result)]
Global $obl[UBound($Result)]
Global $ray[UBound($Result)]
Global $nas_p[UBound($Result)]
Global $vul[UBound($Result)]
Global $bud[UBound($Result)]
Global $kv[UBound($Result)]

For $i =1 To UBound($Result)-1; начало цыкла
   _GUICtrlStatusBar_SetText($status, 'Сформовано :'& $i)
$name[$i] = $Result[$i][2]; вытаскиваем значение с колонки 3
$m_p[$i] = $Result[$i][0];вытаскиваем значение с колонки 1
$index[$i] = $Result[$i][3]
$obl[$i] = $Result[$i][4]
$ray[$i] = $Result[$i][5]
$nas_p[$i] = $Result[$i][6]
$vul[$i] = $Result[$i][7]
$bud[$i] = $Result[$i][8]
$kv[$i] = $Result[$i][9]

;$name1[$i] = $Result[$i][2];
;_ArrayDisplay($name)


$save = @ScriptDir&"\send\"&$name[$i]&".xls"; определяем место сохранения готовых файлов и его имя
Local $sWorkbook1 = @ScriptDir & "\sablon\uved.xls";место нахожденя шаблона
Local $oWork = _Excel_BookOpen($oExcel, $sWorkbook1)
_Excel_RangeWrite($oWork, Default,$name[$i],'L7');Заполняем  колонку ПИБ
;_Excel_RangeWrite($oWork, Default,$name1[$i],'L46');Заполняем  колонку ПИБ
_Excel_RangeWrite($oWork, Default,$m_p[$i],'X5');Заполняем "Место нахождение"
_Excel_RangeWrite($oWork, Default,$index[$i] & ", УКРАЇНА, " & $obl[$i] & " ОБЛ., "& $ray[$i] & "," ,'I8')
_Excel_RangeWrite($oWork, Default,$nas_p[$i] & ", " & $vul[$i] & ", " & $bud[$i] & ", " & $kv[$i] ,'C10')

_Excel_RangeWrite($oWork, Default,$sDPI ,'AJ11')
_Excel_RangeWrite($oWork, Default,$sindex_DPI & ', '& $sobl_DPI & ' ОБЛ., ' ,'AP16')
_Excel_RangeWrite($oWork, Default,$sray_DPI & ' '& $snas_p_DPI & ' '  ,'AJ19')
_Excel_RangeWrite($oWork, Default,$svul_DPI & ' ' & $sbud_DPI,'AJ22')
_Excel_BookSaveAs($oWork, $save)

Next
_Excel_BookClose($oWork)
_Excel_BookClose($oWorkbook)
_Excel_Close($oExcel)

MsgBox(0, "", "Виконано" )
SplashOff()
    EndSwitch
 WEnd



  Func U2A($sVal)
   Return BinaryToString(StringToBinary($sVal, 1), 4)
EndFunc   ;==>U2A
 

Вложения

  • Почта.zip
    22.8 КБ · Просмотры: 4

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Вам же эти шаблоны нужно сохранить под разными именами, например , если в файле с адресами есть 25 строк , то должно появиться 13 заполненных шаблонов (верхняя часть шаблона нечетные строки, нижняя - четные), при этом в последнем шаблоне вторая половинка не будет заполнена (для случая с нечетным количеством строк). Правильно я понимаю ?
Код:
#include <StaticConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiButton.au3>
#include <GuiTab.au3>
#include <ProgressConstants.au3>
#include <Array.au3>
#include <Excel.au3>
#include <File.au3>
#include <AutoItConstants.au3>
#include <GUIStatusBar.au3>

$ini = @ScriptDir & "\119.ini"
$sDPI = IniRead($ini, 'Settings', 'DPI', '')
$sindex_DPI = IniRead($ini, 'Settings', 'index_DPI', '')
$sobl_DPI = IniRead($ini, 'Settings', 'obl_DPI', '')
$sray_DPI = IniRead($ini, 'Settings', 'ray_DPI', '')
$snas_p_DPI = IniRead($ini, 'Settings', 'nas_p_DPI', '')
$svul_DPI = IniRead($ini, 'Settings', 'vul_DPI', '')
$sbud_DPI = IniRead($ini, 'Settings', 'bud_DPI', '')

$POHTA = GUICreate("ПОЧТА@2112", 344, 255, -1, -1, -1, -1)
$tab = GUICtrlCreateTab(0, 0, 353, 354, -1, -1)
GUICtrlSetState(-1, 2048)
GUICtrlCreateTabItem("Заповнення повідомлень")
GUICtrlCreateTabItem("Формування реєстру")
GUICtrlCreateTabItem("Данні автора")
GUICtrlCreateTabItem("")
_GUICtrlTab_SetCurFocus($tab, -1)
GUISwitch($POHTA, _GUICtrlTab_SetCurFocus($tab, 0) & GUICtrlRead($tab, 1))
GUICtrlCreateLabel("Формування повідомлень Ф.119", 39.5, 36, 265, 22, -1, -1)
GUICtrlSetFont(-1, 14, 700, 0, "Times New Roman")
GUICtrlSetBkColor(-1, "-2")
$Button_1 = GUICtrlCreateButton("СФОРМУВАТИ Ф.119", 101, 80, 142, 33, -1, -1)
GUICtrlSetFont(-1, 10, 700, 0, "Times New Roman")
GUICtrlSetColor(-1, "0xFF0000")
GUICtrlSetBkColor(-1, "0x80FF80")
;GUICtrlCreateProgress(21,212,291,20,-1,-1)
GUICtrlCreateButton("Сформувати 'Адресата'", 101, 122, 142, 30, -1, -1)
GUICtrlSetFont(-1, 10, 700, 0, "Times New Roman")
GUICtrlCreateButton("ДРУК", 101, 162, 142, 30, -1, -1)
GUICtrlSetFont(-1, 10, 700, 0, "Times New Roman")
_GUICtrlTab_SetCurFocus($tab, 0)
$status = _GUICtrlStatusBar_Create($POHTA)
_GUICtrlStatusBar_SetText($status, 'Сформовано :')
GUISetState(@SW_SHOW, $POHTA)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button_1

            ;Example()
            Local $oExcel = _Excel_Open(False) ;откриваем Excel
            Local $sWorkbook = @ScriptDir & "\Adresa.xls" ;путь к книге Excel
            Local $oWorkbook = _Excel_BookOpen($oExcel, $sWorkbook) ;откриваем книгу Excel
            Local $Result = _Excel_RangeRead($oWorkbook) ;помещае содержимое в масив
            ;_ArrayDisplay($Result);выводим масив на екран
            _Excel_BookClose($oWorkbook)

            Global $name[UBound($Result)] ;обявляем переменную ПИБ
            Global $m_p[UBound($Result)] ;обявляем переменную "Место нахождение"
            Global $index[UBound($Result)]
            Global $obl[UBound($Result)]
            Global $ray[UBound($Result)]
            Global $nas_p[UBound($Result)]
            Global $vul[UBound($Result)]
            Global $bud[UBound($Result)]
            Global $kv[UBound($Result)]

            $K = 39 ; Это коэффициент строки для нижней части шаблона

            For $i = 1 To UBound($Result) - 1 Step 2 ; начало цыкла
                Local $sWorkbook1 = @ScriptDir & "\sablon\uved.xls"             ;место нахожденя шаблона
                Local $oWork = _Excel_BookOpen($oExcel, $sWorkbook1)

                _GUICtrlStatusBar_SetText($status, 'Сформовано :' & $i)

                $text = '' ;Текст для имени файла
                For $n = 0 To 1 ;Цикл для заполнения нижней и верхней части шаблона (четные и нечетные строки)

                    If $i + $n = UBound($Result) Then ExitLoop ;Если элемент выходит за границы массива - выход из цикла

                    $name[$i + $n] = $Result[$i + $n][2] ; вытаскиваем значение с колонки 3
                    $m_p[$i + $n] = $Result[$i + $n][0] ;вытаскиваем значение с колонки 1
                    $index[$i + $n] = $Result[$i + $n][3]
                    $obl[$i + $n] = $Result[$i + $n][4]
                    $ray[$i + $n] = $Result[$i + $n][5]
                    $nas_p[$i + $n] = $Result[$i + $n][6]
                    $vul[$i + $n] = $Result[$i + $n][7]
                    $bud[$i + $n] = $Result[$i + $n][8]
                    $kv[$i + $n] = $Result[$i + $n][9]

                    ;$name1[$i] = $Result[$i][2];
                    ;_ArrayDisplay($name)

                    _Excel_RangeWrite($oWork, Default, $name[$i + $n], 'L' & 7 + $K * $n) ;Заполняем  колонку ПИБ
                    ;_Excel_RangeWrite($oWork, Default,$name1[$i],'L46');Заполняем  колонку ПИБ
                    _Excel_RangeWrite($oWork, Default, $m_p[$i + $n], 'X' & 5 + $K * $n) ;Заполняем "Место нахождение"
                    _Excel_RangeWrite($oWork, Default, $index[$i + $n] & ", УКРАЇНА, " & $obl[$i + $n] & " ОБЛ., " & $ray[$i + $n] & ",", 'I' & 8 + $K * $n)
                    _Excel_RangeWrite($oWork, Default, $nas_p[$i + $n] & ", " & $vul[$i + $n] & ", " & $bud[$i + $n] & ", " & $kv[$i + $n], 'C' & 10 + $K * $n)

                    _Excel_RangeWrite($oWork, Default, $sDPI, 'AJ' & 11 + $K * $n)
                    _Excel_RangeWrite($oWork, Default, $sindex_DPI & ', ' & $sobl_DPI & ' ОБЛ., ', 'AP' & 16 + $K * $n)
                    _Excel_RangeWrite($oWork, Default, $sray_DPI & ' ' & $snas_p_DPI & ' ', 'AJ' & 19 + $K * $n)
                    _Excel_RangeWrite($oWork, Default, $svul_DPI & ' ' & $sbud_DPI, 'AJ' & 22 + $K * $n)

                    ;ConsoleWrite(@Error&@CR)
                    $text &= ' ' & $name[$i + $n]
                Next

                $save = @ScriptDir & "\send\" & $text & ".xls" ; определяем место сохранения готовых файлов и его имя
                _Excel_BookSaveAs($oWork, $save, $xlExcel8)
                _Excel_BookClose($oWork)
            Next

            _Excel_Close($oExcel)

            MsgBox(0, "", "Виконано")
            SplashOff()
    EndSwitch
WEnd

Func U2A($sVal)
    Return BinaryToString(StringToBinary($sVal, 1), 4)
EndFunc   ;==>U2A
 
Последнее редактирование:
Автор
B

Bingo888

Новичок
Сообщения
36
Репутация
0
Совершенно верно! Спасибо за код сейчас попробую)
Сообщение автоматически объединено:

для случая с нечетным количеством строк * - почемуто не пустую нижнюю часть, а 2 строку туда заполняет не подскажите в чом причина может быть?
 
Последнее редактирование:

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Что же тогда в нижней части ? Остаток от предпоследнего листа ?
 
Автор
B

Bingo888

Новичок
Сообщения
36
Репутация
0
Да вытаскивает предпоследнюю строку с Adresa.xls
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Да, сразу не обратил внимания, исправил в предыдущем сообщении.
Открывать и закрывать файл шаблона нужно внутри цикла , тогда не будет оставаться "хвостов" от предыдущего цикла.
 
Автор
B

Bingo888

Новичок
Сообщения
36
Репутация
0
Добрый вечер! подскажите позжалуйста есть следующая проблема есть папка в которой имеется енное количество файлов .xlsx нужно в каждом их них взять допустим ячейку c3 и создать новый файл в который списком записать эти ячейки.
Вот код который я набросал но почему то не получается вытащить сами данные:
Код:
#include <Array.au3> ;подключаем
#include <Excel.au3>
#include <File.au3>

FileDelete("rro_skasov.xls")
$sFilePath1 = @ScriptDir & '\rro_skasov.xls'


$aFiles = _FileListToArray(@ScriptDir & '\in', '*.xlsx', 1)
_ArrayDisplay($aFiles)
$n=1
Local $aResult[$n][4]
$aResult[0][0] = 'Фіскальний номер РРО'
$aResult[0][1] = 'Найменування СГ'
$aResult[0][2] = 'Дата скасування реєстрації'
$aResult[0][3] = 'Тип реєстрації'


            


For $i =1 To $aFiles[0]

   $hFileTemp = FileOpen(@ScriptDir & '\in\' & $aFiles[$i], 0)
   $String = FileRead($hFileTemp) ;читаем



$HFILL = StringRegExp($String, '(?s)(.*?)', 3)





$n+=1
Redim $aResult[$n][4]

;MsgBox(0, 'Виконано', $a)

$aResult [$n-1][0] = $HFILL[0]


Next

Local $sRangeOrRowStart = 1, $iColStart = 1, $iRowEnd = 10, $iColEnd = 10
$oExcel = _Excel_Open(True)
$oWorkbook = _Excel_BookNew($oExcel)
_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $aResult)
_Excel_BookSaveAs($oWorkbook, $sFilePath1)
_Excel_BookClose($oWorkbo
 

Вложения

  • rro_register_20201007_103431.zip
    3.7 КБ · Просмотры: 1
Последнее редактирование:
Верх