Что нового

Запись в Xls

Bingo888

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

$aFiles = _FileListToArray(@ScriptDir & '\in', '*.csv', 1)


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


$sFilePath1 = @ScriptDir & "\result1.xls"

$HFILL = StringRegExp($String, '(?s)<HFILL>(.*?)</HFILL>', 3)
$HTIN = StringRegExp($String, '(?s)<HTIN>(.*?)</HTIN>', 3)
$HNAME = StringRegExp($String, '(?s)<HNAME>(.*?)</HNAME>', 3)
$HBOS = StringRegExp($String, '(?s)<HBOS>(.*?)</HBOS>', 3)
$H01G1S = StringRegExp($String, '(?s)<H01G1S>(.*?)</H01G1S>', 3)
$HTINSTI = StringRegExp($String, '(?s)<HTINSTI>(.*?)</HTINSTI>', 3)
$HSTI = StringRegExp($String, '(?s)<HSTI>(.*?)</HSTI>', 3)
$HLOCSTI = StringRegExp($String, '(?s)<HLOCSTI>(.*?)</HLOCSTI>', 3)
$HEMAIL = StringRegExp($String, '(?s)<HEMAIL>(.*?)</HEMAIL>', 3);вытягиваем

Local $aResult[1000][9]
$aResult[0][0] = 'Дата формування'
$aResult[0][1] = 'ЄД'
$aResult[0][2] = 'НАЗВА '
$aResult[0][3] = 'ПІБ '
$aResult[0][4] = 'ДІЄ '
$aResult[0][5] = 'ЄДР'
$aResult[0][6] = 'НАЗВА '
$aResult[0][7] = 'ПОСИЛАННЯ '
$aResult[0][8] = 'ЕМЕІЛ'

$aResult [1][0] = $HFILL[0]
$aResult [1][1] = $HTIN[0]
$aResult [1][2] = $HNAME[0]
$aResult [1][3] = $HBOS[0]
$aResult [1][4] = $H01G1S[0]
$aResult [1][5] = $HTINSTI[0]
$aResult [1][6] = $HSTI [0]
$aResult [1][7] = $HLOCSTI[0]
$aResult [1][8] = $HEMAIL[0]


$oExcel = _Excel_Open(True)
$oWorkbook = _Excel_BookNew($oExcel)
_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $aResult)
_Excel_BookSaveAs($oWorkbook, $sFilePath1[$i])
_Excel_BookClose($oWorkbook)
_Excel_Close($oExcel)

Next
 
Последнее редактирование модератором:

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Если так , как у Вас написано (я имею в виду то, что Вы берёте из результата
StringRegExp
) всё устраивает, тогда пробуйте так :
Код:
#include <Array.au3> ;подключаем
#include <Excel.au3>
#include <File.au3>

$sFilePath1 = @ScriptDir & "\result1.xls"
$aFiles = _FileListToArray(@ScriptDir & '\in', '*.csv', 1)

$n=1
Local $aResult[$n][9]

$aResult[0][0] = 'Дата формування'
$aResult[0][1] = 'ЄД'
$aResult[0][2] = 'НАЗВА '
$aResult[0][3] = 'ПІБ '
$aResult[0][4] = 'ДІЄ '
$aResult[0][5] = 'ЄДР'
$aResult[0][6] = 'НАЗВА '
$aResult[0][7] = 'ПОСИЛАННЯ '
$aResult[0][8] = 'ЕМЕІЛ'

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

$HFILL = StringRegExp($String, '(?s)<HFILL>(.*?)</HFILL>', 3)
$HTIN = StringRegExp($String, '(?s)<HTIN>(.*?)</HTIN>', 3)
$HNAME = StringRegExp($String, '(?s)<HNAME>(.*?)</HNAME>', 3)
$HBOS = StringRegExp($String, '(?s)<HBOS>(.*?)</HBOS>', 3)
$H01G1S = StringRegExp($String, '(?s)<H01G1S>(.*?)</H01G1S>', 3)
$HTINSTI = StringRegExp($String, '(?s)<HTINSTI>(.*?)</HTINSTI>', 3)
$HSTI = StringRegExp($String, '(?s)<HSTI>(.*?)</HSTI>', 3)
$HLOCSTI = StringRegExp($String, '(?s)<HLOCSTI>(.*?)</HLOCSTI>', 3)
$HEMAIL = StringRegExp($String, '(?s)<HEMAIL>(.*?)</HEMAIL>', 3);вытягиваем

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

$aResult [$n-1][0] = $HFILL[0]
$aResult [$n-1][1] = $HTIN[0]
$aResult [$n-1][2] = $HNAME[0]
$aResult [$n-1][3] = $HBOS[0]
$aResult [$n-1][4] = $H01G1S[0]
$aResult [$n-1][5] = $HTINSTI[0]
$aResult [$n-1][6] = $HSTI [0]
$aResult [$n-1][7] = $HLOCSTI[0]
$aResult [$n-1][8] = $HEMAIL[0]

Next

$oExcel = _Excel_Open(True)
$oWorkbook = _Excel_BookNew($oExcel)
_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $aResult)
_Excel_BookSaveAs($oWorkbook, $sFilePath1[$i])
_Excel_BookClose($oWorkbook)
_Excel_Close($oExcel)
 
Автор
B

Bingo888

Новичок
Сообщения
36
Репутация
0
Помогло, спасибо вам огромное. Не подскажите можно ли как то задать ширину ячеек и перенос текста внутри них и если можно подскажите как виделить его жирним?
 

Dm666

Осваивающий
Сообщения
221
Репутация
48
Код:
_ExcelFontSetProperties($oExcel, $sRangeOrRowStart [, $iColStart = 1 [, $iRowEnd = 1 [, $iColEnd = 1 [, $fBold = False [, $fItalic = False [, $fUnderline = False]]]]]])


Устанавливает формат начертания символов: "жирный", "курсив" или "подчеркнутый" для всех ячеек целевого диапазона.
 
Последнее редактирование:
Автор
B

Bingo888

Новичок
Сообщения
36
Репутация
0
у меня такой функции в модуле Exel.au3 нет почемуто
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Нет , потому что эта функция из старой UDF Excel.au3 . в новой её нет, но вот она выдранная из старой UDF , можно вставить в свой скрипт и пользоваться , либо посмотреть , что именно вам нужно и вставить в свой код нужную строку.
Код:
; #FUNCTION# ====================================================================================================================
; Name...........: _ExcelFontSetProperties
; Description ...: Set the bold, italic, and underline font properties of a range in an Excel object.
; Syntax.........: _ExcelFontSetProperties($oExcel, $sRangeOrRowStart[, $iColStart = 1[, $iRowEnd = 1[, $iColEnd = 1[, $fBold = False[, $fItalic = False[, $fUnderline = False]]]]]])
; Parameters ....: $oExcel - An Excel object opened by a preceding call to _ExcelBookOpen() or _ExcelBookNew()
;                  $sRangeOrRowStart - Either an A1 range, or an integer row number to start from if using R1C1
;                  $iColStart - The starting column for the number format(left) (default=1)
;                  $iRowEnd - The ending row for the number format (bottom) (default=1)
;                  $iColEnd - The ending column for the number format (right) (default=1)
;                  $fBold - Bold flag: TRUE=Bold, FALSE=No Bold (remove bold type)
;                  $fItalic - Italic flag: TRUE=Italic, FALSE=No Italic (remove italic type)
;                  $fUnderline - Underline flag: TRUE=Underline, FALSE=No Underline (remove underline type)
; Return values .: On Success - Returns 1
;                  On Failure - Returns 0 and sets @error on errors:
;                  |@error=1 - Specified object does not exist
;                  |@error=2 - Starting row or column invalid
;                  |@extended=0 - Starting row invalid
;                  |@extended=1 - Starting column invalid
;                  |@error=3 - Ending row or column invalid
;                  |@extended=0 - Ending row invalid
;                  |@extended=1 - Ending column invalid
; Author ........: SEO <locodarwin at yahoo dot com>
; Modified.......: litlmike
; Remarks .......: None
; Related .......:
; Link ..........:
; Example .......: Yes
; ===============================================================================================================================
Func _ExcelFontSetProperties($oExcel, $sRangeOrRowStart, $iColStart = 1, $iRowEnd = 1, $iColEnd = 1, $fBold = False, $fItalic = False, $fUnderline = False)
    If Not IsObj($oExcel) Then Return SetError(1, 0, 0)
    If Not StringRegExp($sRangeOrRowStart, "[A-Z,a-z]", 0) Then
        If $sRangeOrRowStart < 1 Then Return SetError(2, 0, 0)
        If $iColStart < 1 Then Return SetError(2, 1, 0)
        If $iRowEnd < $sRangeOrRowStart Then Return SetError(3, 0, 0)
        If $iColEnd < $iColStart Then Return SetError(3, 1, 0)
        $oExcel.Activesheet.Range($oExcel.Cells($sRangeOrRowStart, $iColStart), $oExcel.Cells($iRowEnd, $iColEnd)).Font.Bold = $fBold
        $oExcel.Activesheet.Range($oExcel.Cells($sRangeOrRowStart, $iColStart), $oExcel.Cells($iRowEnd, $iColEnd)).Font.Italic = $fItalic
        $oExcel.Activesheet.Range($oExcel.Cells($sRangeOrRowStart, $iColStart), $oExcel.Cells($iRowEnd, $iColEnd)).Font.Underline = $fUnderline
    Else
        $oExcel.Activesheet.Range($sRangeOrRowStart).Font.Bold = $fBold
        $oExcel.Activesheet.Range($sRangeOrRowStart).Font.Italic = $fItalic
        $oExcel.Activesheet.Range($sRangeOrRowStart).Font.Underline = $fUnderline
    EndIf
    Return 1
EndFunc
 
Автор
B

Bingo888

Новичок
Сообщения
36
Репутация
0
Что то туговато пока доходит, можете примером на мой код показать допустим как зделать фиксированую ширину ячеек и чтоб текст в ячейке А:B1 ,был жирным?
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Пробуйте так :
Код:
#include <Array.au3> ;подключаем
#include <Excel.au3>
#include <File.au3>

$sFilePath1 = @ScriptDir & "\result1.xls"
$aFiles = _FileListToArray(@ScriptDir & '\in', '*.csv', 1)

$n=1
Local $aResult[$n][9]

$aResult[0][0] = 'Дата формування'
$aResult[0][1] = 'ЄД'
$aResult[0][2] = 'НАЗВА '
$aResult[0][3] = 'ПІБ '
$aResult[0][4] = 'ДІЄ '
$aResult[0][5] = 'ЄДР'
$aResult[0][6] = 'НАЗВА '
$aResult[0][7] = 'ПОСИЛАННЯ '
$aResult[0][8] = 'ЕМЕІЛ'

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

$HFILL = StringRegExp($String, '(?s)<HFILL>(.*?)</HFILL>', 3)
$HTIN = StringRegExp($String, '(?s)<HTIN>(.*?)</HTIN>', 3)
$HNAME = StringRegExp($String, '(?s)<HNAME>(.*?)</HNAME>', 3)
$HBOS = StringRegExp($String, '(?s)<HBOS>(.*?)</HBOS>', 3)
$H01G1S = StringRegExp($String, '(?s)<H01G1S>(.*?)</H01G1S>', 3)
$HTINSTI = StringRegExp($String, '(?s)<HTINSTI>(.*?)</HTINSTI>', 3)
$HSTI = StringRegExp($String, '(?s)<HSTI>(.*?)</HSTI>', 3)
$HLOCSTI = StringRegExp($String, '(?s)<HLOCSTI>(.*?)</HLOCSTI>', 3)
$HEMAIL = StringRegExp($String, '(?s)<HEMAIL>(.*?)</HEMAIL>', 3);вытягиваем

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

$aResult [$n-1][0] = $HFILL[0]
$aResult [$n-1][1] = $HTIN[0]
$aResult [$n-1][2] = $HNAME[0]
$aResult [$n-1][3] = $HBOS[0]
$aResult [$n-1][4] = $H01G1S[0]
$aResult [$n-1][5] = $HTINSTI[0]
$aResult [$n-1][6] = $HSTI [0]
$aResult [$n-1][7] = $HLOCSTI[0]
$aResult [$n-1][8] = $HEMAIL[0]

Next

$oExcel = _Excel_Open(True)
$oWorkbook = _Excel_BookNew($oExcel)
_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $aResult)
$oExcel.Activesheet.Range($oExcel.Cells(1, 1), $oExcel.Cells(1, 2)).Font.Bold = 1 ;жирный шрифт в ячейках А1 и В1
$oExcel.Activesheet.Range($oExcel.Cells(1, 1), $oExcel.Cells(1, 2)).ColumnWidth = 25 ;ширина ячеек А и В

_Excel_BookSaveAs($oWorkbook, $sFilePath1[$i])
_Excel_BookClose($oWorkbook)
_Excel_Close($oExcel)
 
Верх