#include <Excel.au3>
#include <Array.au3>
#include <File.au3>
$sExcelPath = @ScriptDir & "\"
$sXMLPath = @ScriptDir
Global $aResult[1][5]
Global $aPokazatel[4] = ["КодСтроки", "СумОтч", "СумПрдщ", "СумПрдшв"]
$OllFile=_FileListToArray($sXMLPath, "*.xml" , 1)
If Not @error Then
For $i=1 to $OllFile[0]
_CreateArray($sXMLPath&'\'&$OllFile[$i])
$sFile=StringMid($OllFile[$i],1,StringInStr($OllFile[$i],".", 0,-1)-1);Имя файла без расширения
_WriteExcel($aResult,$sExcelPath&$sFile&'.xlsx')
Next
EndIf
Func _CreateArray($XMLFile)
Global $n = 0
Global $TextFile = FileRead($XMLFile)
$aResult[$n][1] = 'Коды'
;Функция _GetText ищет значение в блоке и записывает в массив значение
;Последний параметр : 0 - Записывает в первую колонку название параметра
; 1(или любое значение не "0" - записывает в первую колонку название блока
;Если второй параметр строка, то записывается только одно значение,
; Если второй параметр массив - несколько строк, сколько элементов в массиве
_GetText('Баланс', 'ОКУД', 0)
_GetText('Документ', 'Период', 0)
_GetText('СвНП', 'ОКПО', 0)
_GetText('НПЮЛ', 'ИННЮЛ', 0)
_GetText('СвНП', 'ОКВЭД', 0)
_GetText('СвНП', 'ОКОПФ', 0)
_GetText('СвНП', 'ОКФС', 0)
_GetText('Документ', 'ОКЕИ', 0)
$n += 1
ReDim $aResult[$n + 1][5]
$aResult[$n][0] = 'Организация'
$aResult[$n][1] = _GetTextOnly('НПЮЛ', 'НаимОрг')
$n += 1
ReDim $aResult[$n + 1][5]
$aResult[$n][0] = 'Единица измерения'
$aResult[$n][1] = 'в тыс рублей'
$n += 1
ReDim $aResult[$n + 1][5]
$aResult[$n][0] = 'Местонахождение (адрес)'
$aResult[$n][1] = _GetTextOnly('АдрРФ', 'Индекс') & ' ' & _GetTextOnly('АдрРФ', 'Город') & _
' ' & _GetTextOnly('АдрРФ', 'Улица') & ' ' & _GetTextOnly('АдрРФ', 'Дом') & ' ' & _GetTextOnly('АдрРФ', 'Кварт')
$n += 1
ReDim $aResult[$n + 1][5]
$aResult[$n][0] = 'Наименование показателя'
For $i = 0 To UBound($aPokazatel) - 1
$aResult[$n][$i + 1] = $aPokazatel[$i]
Next
_GetText('Актив', $aPokazatel) ; - <Актив КодСтроки="1600" СумОтч="1813" СумПрдщ="1813" СумПрдшв="1413">
_GetText('МатВнеАкт', $aPokazatel) ; <МатВнеАкт КодСтроки="1150" СумОтч="1000" СумПрдщ="1000" СумПрдшв="1000" />
_GetText('Запасы', $aPokazatel) ; <Запасы КодСтроки="1210" СумОтч="371" СумПрдщ="371" СумПрдшв="371" />
_GetText('ДенежнСр', $aPokazatel) ; <ДенежнСр КодСтроки="1250" СумОтч="0" />
_GetText('ФинВлож', $aPokazatel) ; <ФинВлож КодСтроки="1230" СумОтч="442" СумПрдщ="442" СумПрдшв="42" />
_GetText('Пассив', $aPokazatel) ; - <Пассив КодСтроки="1700" СумОтч="1813" СумПрдщ="1813" СумПрдшв="1413">
_GetText('ДлгЗаемСредств', $aPokazatel) ; <ДлгЗаемСредств КодСтроки="1410" СумОтч="0" />
_GetText('КртЗаемСредств', $aPokazatel) ; <КртЗаемСредств КодСтроки="1510" СумОтч="793" СумПрдщ="793" СумПрдшв="393" />
_GetText('КредитЗадолж', $aPokazatel) ; <КредитЗадолж КодСтроки="1520" СумОтч="47" СумПрдщ="47" СумПрдшв="47" />
_GetText('ДрКраткосрОбяз', $aPokazatel) ; <ДрКраткосрОбяз КодСтроки="1550" СумОтч="43" СумПрдщ="43" СумПрдшв="43" />
EndFunc
Func _GetText($BlocName, $Parametr, $dt = 1)
$n += 1
ReDim $aResult[$n + 1][5]
$Stroka = StringRegExp($TextFile, '<' & $BlocName & '(.*?)>', 1)
If Not @error Then
If $dt Then
$aResult[$n][0] = $BlocName
Else
$aResult[$n][0] = $Parametr
EndIf
If IsArray($Parametr) Then
For $i = 0 To UBound($Parametr) - 1
$aParam = StringRegExp($Stroka[0], $aPokazatel[$i] & '="(.*?)"', 1)
If Not @error Then $aResult[$n][$i + 1] = $aParam[0]
Next
Else
$EndMask = '"'
$EndName = ''
If $Parametr = 'НаимОрг' And StringInStr($Stroka[0], '""') Then
$EndMask = '""'
$EndName = '"'
EndIf
$aParam = StringRegExp($Stroka[0], $Parametr & '="(.*?)' & $EndMask, 1)
If Not @error Then $aResult[$n][1] = $aParam[0] & $EndName
EndIf
EndIf
EndFunc ;==>_GetText
Func _GetTextOnly($BlocName, $Parametr)
Local $Res = ''
$Stroka = StringRegExp($TextFile, '<' & $BlocName & '(.*?)>', 1)
If Not @error Then
$EndMask = '"'
$EndName = ''
If $Parametr = 'НаимОрг' And StringInStr($Stroka[0], '""') Then
$EndMask = '""'
$EndName = '"'
EndIf
$aParam = StringRegExp($Stroka[0], $Parametr & '="(.*?)' & $EndMask, 1)
If Not @error Then $Res = $aParam[0] & $EndName
EndIf
Return $Res
EndFunc ;==>_GetTextOnly
Func _WriteExcel($aResult,$FileName)
$oExcel = _Excel_Open(False)
$oWorkbook = _Excel_BookNew($oExcel)
_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $aResult)
_Excel_BookSaveAs($oWorkbook, $FileName)
_Excel_BookClose($oWorkbook)
_Excel_Close($oExcel)
EndFunc ;==>_WriteExcel