Что нового

Перенос информации из файла xml в файл xls

Автор
A

Anna

Новичок
Сообщения
119
Репутация
2
Да, xlsx.
Думала это из-за двойных кавычек в исходном файле.
- <НПЮЛ НаимОрг="ООО "ДальТрансСервис""
 

Вложения

  • aa.JPG
    aa.JPG
    37.8 КБ · Просмотры: 7

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Это в .XLSX что ли? У меня все в норм.
Проверил в своём варианте - тоже всё норм , без посторонних символов.
Мой вариант с перебором всех xml файлов
Код:
#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
 

Вложения

  • 1.JPG
    1.JPG
    42 КБ · Просмотры: 12
A

Alofa

Гость
Anna
Код:
; Замените строку
_Excel_BookSaveAs($oWorkbook, $aXMLList[$i] & '.xlsx')
; на...
_Excel_BookSaveAs($oWorkbook, $aXMLList[$i] & '.xls', $xlExcel8)


И обновите уже, наконец, Microsoft Office, хотя бы до 2007.
 
Верх