Что нового

[Данные, строки] Поиск значений в XML файле, и сохранение в excel

atmel007

Новичок
Сообщения
13
Репутация
0
Здрвствуйте, подскажите как из файла в xml достать данные каждой секции за один день. файл создает программа eyebeam в файле recentcalls.cps хранятся совершенные звонки (до 1000) , хотелось бы вытянуть из файла колличество звонков, номера телефонов и даты и время звонков за сутки. и сохранить в xls.
Код:
<?xml version="1.0" encoding="UTF-8" ?>
<settings version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.counterpath.com/cps">
  <domain name="calls_out">
    <section name="100">
      <setting name="account" value="0"/>
      <setting name="comment" value=""/>
      <setting name="display_name" value="2360000"/>
      <setting name="duration" value="24"/>
      <setting name="flagged" value="0"/>
      <setting name="number" value="2360000"/>
      <setting name="start" value="1361264857"/>
      <setting name="success" value="1"/>
    </section>
    <section name="101">
      <setting name="account" value="0"/>
      <setting name="comment" value="Busy here"/>
      <setting name="display_name" value="2360001"/>
      <setting name="duration" value="0"/>
      <setting name="flagged" value="0"/>
      <setting name="number" value="2360001"/>
      <setting name="start" value="1361265010"/>
      <setting name="success" value="0"/>
    </section>
     <section name="1">                                               ;номер звонка
      <setting name="account" value="0"/>
      <setting name="comment" value=""/>
      <setting name="display_name" value="0443191022"/>  ; номер телефона
      <setting name="duration" value="19"/>                     ;длительность разговора 19 сек
      <setting name="flagged" value="0"/>
      <setting name="number" value="0443191022"/>         ; номер телефона
      <setting name="start" value="1360656920"/>            ; предположительно как-то зашифрована  дата звонка
      <setting name="success" value="1"/>                      
    </section>
    <section name="2">
      <setting name="account" value="0"/>
      <setting name="comment" value="Declined"/>
      <setting name="display_name" value="0563197768"/>
      <setting name="duration" value="0"/>
      <setting name="flagged" value="0"/>
      <setting name="number" value="0563197768"/>
      <setting name="start" value="1360659703"/>
      <setting name="success" value="0"/>
    </section>
  </domain>
</settings>
 

nu3dell

Осваивающий
Сообщения
139
Репутация
24
Код:
#include <Excel.au3>

$sFilePath1 = @ScriptDir & "\save.xls" ;~ сохраняем
$sFilePath2 = @ScriptDir & "\recentcalls.xml" ;~ открываем

$oExcel = _ExcelBookNew(0)
If @error = 1 Then
	MsgBox(4096, "Ошибка!", "Ошибка OLE\COM")
	Exit
ElseIf @error = 2 Then
	MsgBox(4096, "Ошибка!", "Файл не существует или имеет неправильный формат!")
	Exit
EndIf

_saver("number", 1) ;~ number = что будем сохранять ;  1 = колонка
_saver("start", 3)
_saver("duration", 5)
_saver("comment",7)

_ExcelBookSaveAs($oExcel, $sFilePath1, "xls", 0, 1)
_ExcelBookClose($oExcel)

Func _saver($parametr, $col)
$count = 1
$nOffset = 1

While 1
	$aNumber = StringRegExp(FileRead($sFilePath2), '<setting name="'&$parametr&'" value="(.*?)"/>', 1, $nOffset)
	If @error = 0 Then
		$nOffset = @extended
	Else
		ExitLoop
	EndIf
	For $i = 0 To UBound($aNumber) - 1
		_ExcelWriteCell($oExcel, $parametr, $count, $col)
		_ExcelWriteCell($oExcel, $aNumber[$i], $count, $col+1)
	Next
	$count += 1
WEnd
EndFunc
 
Автор
A

atmel007

Новичок
Сообщения
13
Репутация
0
Большое спасибо за столь быстрый ответ, практически то что нужно.
 

nu3dell

Осваивающий
Сообщения
139
Репутация
24
Код:
#include <Excel.au3>

$sFilePath1 = @ScriptDir & "\save.xls" ;~ сохраняем
$sFilePath2 = @ScriptDir & "\recentcalls.xml" ;~ открываем

$oExcel = _ExcelBookNew(0)
If @error = 1 Then
    MsgBox(4096, "Ошибка!", "Ошибка OLE\COM")
    Exit
ElseIf @error = 2 Then
    MsgBox(4096, "Ошибка!", "Файл не существует или имеет неправильный формат!")
    Exit
EndIf

_saver("number", 1) ;~ number = что будем сохранять ;  1 = колонка
_saver("start", 2)
_saver("duration", 3)
_saver("comment",4)

_ExcelBookSaveAs($oExcel, $sFilePath1, "xls", 0, 1)
_ExcelBookClose($oExcel)

Func _saver($parametr, $col)
$count = 1
$nOffset = 1

While 1
    $aNumber = StringRegExp(FileRead($sFilePath2), '<setting name="'&$parametr&'" value="(.*?)"/>', 1, $nOffset)
    If @error = 0 Then
        $nOffset = @extended
    Else
        ExitLoop
    EndIf
    For $i = 0 To UBound($aNumber) - 1
        _ExcelWriteCell($oExcel, $parametr&" : "&$aNumber[$i], $count, $col)
    Next
    $count += 1
WEnd
$oExcel.Columns( $col).EntireColumn.AutoFit
EndFunc



Добавлено:
Сообщение автоматически объединено:

изменил 2 код,
Исправил $oExcel.Columns( $col).EntireColumn.AutoFit
 
Автор
A

atmel007

Новичок
Сообщения
13
Репутация
0
Спасибо! Помогли, попробую еще найти закономерность между числом в программе формата 13.03.2013 15.00.26 и десятизначным числом файле.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
atmel007 [?]
попробую еще найти закономерность между числом в программе формата 13.03.2013 15.00.26 и десятизначным числом файле.
Код:
#include <Date.au3>

Global $aSec[3] = [1361265010, 1360656920, 1360659703]

For $i = 0 To 2
	$sDate = _DateAdd('s', $aSec[$i], '1970/01/01 00:00:00')
	ConsoleWrite($aSec[$i] & ' Sec to Date -->> ' & $sDate & '-->> ' & _DateTimeFormat($sDate, 0) & @LF)
	$iSec = _DateDiff('s', '1970/01/01 00:00:00',  $sDate)
	ConsoleWrite($sDate & ' Date to sec <<-- ' & $iSec & @LF)
	ConsoleWrite('---' & @LF)
Next
 

nu3dell

Осваивающий
Сообщения
139
Репутация
24
исходя из поста выше, моя функция станет такой:

Код:
#include <Date.au3>
Func _saver($parametr, $col)
	$count = 1
	$nOffset = 1

	While 1
		$aNumber = StringRegExp(FileRead($sFilePath2), '<setting name="' & $parametr & '" value="(.*?)"/>', 1, $nOffset)
		If @error = 0 Then
			$nOffset = @extended
		Else
			ExitLoop
		EndIf
		For $i = 0 To UBound($aNumber) - 1
			If $parametr = "start" Then
				_ExcelWriteCell($oExcel, $parametr & " : " & _DateTimeFormat(_DateAdd('s', $aNumber[$i], '1970/01/01 00:00:00'),0), $count, $col)
			Else
				_ExcelWriteCell($oExcel, $parametr & " : " & $aNumber[$i], $count, $col)
			EndIf
		Next
		$count += 1
	WEnd
	$oExcel.Columns($col).EntireColumn.AutoFit
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
nu3dell [?]
моя функция станет такой
ИМХО:
1. Зачем каждый раз читать файл.
2. Чем не устраивает флаг 3 в StringRegExp?
3. Если все же флаг 1, то вместо цикла For ...To проще использовать $aNumber[0]
 
Автор
A

atmel007

Новичок
Сообщения
13
Репутация
0
исходя из ваших скриптов получилось
Код:
Opt("TrayMenuMode", 1)
#include <Excel.au3>
#include <Date.au3>

If WinExists(@ScriptName) Then Exit ; защита от повторного запуска скрипта
AutoItWinSetTitle(@ScriptName)

$ipid = ProcessExists("eyeBeam.exe")
While ProcessExists($iPID)
	Sleep(1500)
	;If MsgBox(4 + 32, 'Внимание', "Обнаружена запущенная программа eyeBeam, закрыть ее? ") = 6 Then
	;	ProcessClose($iPID)
		MsgBox(4096, "Ошибка!", "Закройте программу EyeBeam")
		ProcessWaitClose($iPID)
	;Else
	;	MsgBox(4096, "Ошибка!", "Закройте программу eyeBeam и запустите повторно этот скрипт")
	;	Exit
	;EndIf
WEnd

FileCopy(@UserProfileDir& "\Local Settings\Application Data\CounterPath\RegNow Enhanced\default_user\recentcalls.cps", @ScriptDir& "\recentcalls.xml", 9)
$sFilePath1 = @ScriptDir & "\recentcalls.xml" ;~ открываем
$sFilePath2 = @ScriptDir & "\"&@MDAY&"_"&@MON&"_"&@YEAR&"_"&@HOUR&"_"&@MIN&".xls" ;~ сохраняем

$oExcel = _ExcelBookNew(0)
If @error = 1 Then
    MsgBox(4096, "Ошибка!", "Ошибка OLE\COM")
    Exit
ElseIf @error = 2 Then
    MsgBox(4096, "Ошибка!", "Файл не существует или имеет неправильный формат!")
    Exit
EndIf

_saver("number", 1) ;~ number = что будем сохранять ;  1 = колонка
_saver("start", 3)
_saver("duration", 5)
_saver("comment",7)

_ExcelBookSaveAs($oExcel, $sFilePath2, "xls", 0, 1)
_ExcelBookClose($oExcel)

If MsgBox(4 + 32, "Внимание!", "Файл создан: "&$sFilePath2 & @CRLF & "открыть его сейчас?") = 6 Then
	_ExcelBookOpen($sFilePath2, 1 )
	Else
		Exit
	EndIf



Func _saver1($parametr, $col)   ;альтернатива
$count = 1
$nOffset = 1

While 1
    $aNumber = StringRegExp(FileRead($sFilePath1), '<setting name="'&$parametr&'" value="(.*?)"/>', 1, $nOffset)
    If @error = 0 Then
        $nOffset = @extended
    Else
        ExitLoop
    EndIf
    For $i = 0 To UBound($aNumber) - 1
		if $parametr == "start" Then
			Local	$aSec[1] = [$aNumber[$i]]
				$sDate = _DateAdd('s', $aSec[$i], '1970/01/01 00:00:00')
				$aNumber[$i]=_DateTimeFormat($sDate, 0)
			_ExcelWriteCell($oExcel, $parametr&" : "&$aNumber[$i], $count, $col)
		Else
			_ExcelWriteCell($oExcel, $parametr&" : "&$aNumber[$i], $count, $col)
		EndIf
    Next
    $count += 1
WEnd
$oExcel.Columns( $col).EntireColumn.AutoFit
EndFunc


Func _saver($parametr, $col)    ;предпочтительное форматирование ячеек
$count = 1
$nOffset = 1

While 1
    $aNumber = StringRegExp(FileRead($sFilePath1), '<setting name="'&$parametr&'" value="(.*?)"/>', 1, $nOffset)
    If @error = 0 Then
        $nOffset = @extended
    Else
        ExitLoop
    EndIf
    For $i = 0 To UBound($aNumber) - 1
		if $parametr == "start" Then
		Local	$aSec[1] = [$aNumber[$i]]
			$sDate = _DateAdd('s', $aSec[$i], '1970/01/01 02:00:00')  ;коррекция +2 часа 
			$aNumber[$i]=_DateTimeFormat($sDate, 0)
		    _ExcelWriteCell($oExcel, $parametr, $count, $col)
            _ExcelWriteCell($oExcel, $aNumber[$i], $count, $col+1)
		Else
		     _ExcelWriteCell($oExcel, $parametr, $count, $col)
             _ExcelWriteCell($oExcel, $aNumber[$i], $count, $col+1)
		EndIf

    Next
    $count += 1
	$oExcel.Columns($col).EntireColumn.AutoFit
WEnd
;$oExcel.Columns($col).EntireColumn.AutoFit      ;почему то не работает
EndFunc


:IL_AutoIt_1: nu3dell опередил с ответом ))) Спасибо всем за помощь, теперь то что нужно
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
gezan1 [?]
Хочу попросить помощи в аналогичном случае
Предупреждение За нарушение общих правил (пункт В.4):
Не лепите несколько вопросов разной тематики в один пост. По типу "Ребят, а ещё такой вопрос...". Каждый вопрос в свою тему.


С уважением, ваш Модератор.
 

XpycT

Скриптер
Сообщения
380
Репутация
132
atmel007
Вот еще вариант

Код:
#Include <Array.au3>
#include <Date.au3>
#include <Excel.au3>

$sXML = @ScriptDir & "\RecentCalls.xml"
$sXLS = @ScriptDir & "\RecentCalls.xls"

$oXML = ObjCreate("Msxml2.DOMDocument.6.0")
If Not IsObj($oXML) Then Exit 99 * 0 + ConsoleWrite("Not IsObj($oXML)" & @CR) 

$oExcel = _ExcelBookNew()
If @error = 1 Then
    Exit 99 * 0 + MsgBox(4096, "Ошибка!", "Ошибка OLE\COM")
ElseIf @error = 2 Then
    Exit 99 * 0 + MsgBox(4096, "Ошибка!", "Файл не существует или имеет неправильный формат!")
EndIf

Dim $aCols[] = ["", "display_name", "duration", "number", "start"], $iRow = 1

For $iCol = 0 To UBound($aCols, 1) - 1
	_ExcelWriteCell($oExcel, $aCols[$iCol], $iRow, $iCol + 1)

	$oExcel.Columns($iCol).EntireColumn.AutoFit
Next

$iRow += 1

$oXML.Load($sXML)

$oSections = $oXML.SelectNodes('settings/domain/section')
If $oXML.ParseError.ErrorCode <> 0 Then Exit 99 * 0 + ConsoleWrite("$oXML.SelectNodes | Error > " & $oXML.ParseError.Reason & @CR)

For $oSection In $oSections

	_ExcelWriteCell($oExcel, $oSection.GetAttribute("name"), $iRow, 1)

	For $iCol = 1 To UBound($aCols, 1) - 1
		$sValue = $oSection.SelectSingleNode('setting[@name="' & $aCols[$iCol] & '"]').GetAttribute("value")

		If $iCol = 4 Then $sValue = _DateAdd('s', $sValue, '1970/01/01 00:00:00')

		_ExcelWriteCell($oExcel, $sValue, $iRow, $iCol + 1)

		$oExcel.Columns($iCol + 1).EntireColumn.AutoFit
	Next
	$iRow += 1
Next

MsgBox(4096, "Exiting", "Press OK to Save File and Exit")
_ExcelBookSaveAs($oExcel, $sXLS, "xls", 0, 1) ; Now we save it into the temp directory; overwrite existing file if necessary
_ExcelBookClose($oExcel) ; And finally we close out
 
Автор
A

atmel007

Новичок
Сообщения
13
Репутация
0
XpycT, а у он меня не запустился.. ошибка в Dim $aCols[] , я там 5 добавил, он запустился но запустился и открывается чистая новая книга excel и дальше все.
 

XpycT

Скриптер
Сообщения
380
Репутация
132
atmel007
Какая версия AutoIt?

У меня на 3.3.9.4 Beta все нормально работает.

Изменил скрипт, попробуй еще раз, что выдает??
 

---Zak---

Скриптер
Сообщения
438
Репутация
113
Код:
$sXLS = @ScriptDir & "\RecentCalls.xls"

_ExcelBookSaveAs($oExcel, $sXLS, "xls", 0, 1)


Путь + имя сохраняемого файла (н/п C:\Docunents\myworkbook)
Внимание!!! имя указывается без расширения, расширение сохраняемого файла определяется параметром $sType
 
Автор
A

atmel007

Новичок
Сообщения
13
Репутация
0
XpycT Версия AutoIt:3.3.8.1
такая же ошибка выскакивает... хотя может я что-то не так запускаю.
 

---Zak---

Скриптер
Сообщения
438
Репутация
113
Я просто закоментил строку:
Код:
**************.au3 (23) : ==> The requested action with this object has failed.:
$oExcel.Columns($iCol).EntireColumn.AutoFit
$oExcel.Columns($iCol)^ ERROR
В исходнике есть комментарии - их необходимо удалить
Код:
$oXML.SelectNodes | Error > В текстовом комментарии обнаружен недопустимый знак.
ЗЫ: не отрабатывает
Код:
$oSections = $oXML.SelectNodes('settings/domain/section')
 
Автор
A

atmel007

Новичок
Сообщения
13
Репутация
0
Все разобрался... не скажу что быстро работает, но делает то что нужно.
Код:
Opt("TrayMenuMode", 1)
#include <Excel.au3>
#include <Date.au3>
#include <Misc.au3>

If WinExists(@ScriptName) Then Exit ; защита от повторного запуска скрипта
AutoItWinSetTitle(@ScriptName)

_Autoupdate(1)
$ipid = ProcessExists("eyeBeam.exe")
While ProcessExists($ipid)
	TrayTip("Закройте программу EyeBeam", "", 30, 1)
	Sleep(1500)
	MsgBox(4096, "Ошибка!", "Закройте программу EyeBeam")
	ProcessWaitClose($ipid)
WEnd

FileCopy(@UserProfileDir & "\Local Settings\Application Data\CounterPath\RegNow Enhanced\default_user\recentcalls.cps", @ScriptDir & "\recentcalls.xml", 9)
$sFilePath1 = @ScriptDir & "\recentcalls.xml" ;~ открываем
$sFilePath2 = @ScriptDir & "\" & @UserName & "_" & @MDAY & "_" & @MON & "_" & @YEAR & "_" & @HOUR & "_" & @MIN & ".xls" ;~ сохраняем
TrayTip("Создаем файл отчета", $sFilePath2, 30, 1)
$oExcel = _ExcelBookNew(0)
If @error = 1 Then
	MsgBox(4096, "Ошибка!", "Ошибка OLE\COM")
	Exit
ElseIf @error = 2 Then
	MsgBox(4096, "Ошибка!", "Файл не существует или имеет неправильный формат!")
	Exit
EndIf

$oExcel.Application.ScreenUpdating = False

_Saver("number", 1) ;~ number = что будем сохранять ;  1 = колонка
_Saver("start", 3)
_Saver("duration", 5)
_Saver("comment", 7)

Global $iTrueRowsCount = $oExcel.Activesheet.UsedRange.Rows.Count
$oExcel.Columns('A:H').EntireColumn.AutoFit
; $oExcel.Range("A1:H"& $iTrueRowsCount).Select
;_MakeBorderOfCell($oExcel,"A1:H" & $iTrueRowsCount) ; сделать тонкие границы ячеек
_ExcelSortExtended($oExcel, "D1", "A1:H" & $iTrueRowsCount, 4, $iTrueRowsCount, 4, 1, 0, False, 1, 0)
$oExcel.Application.ScreenUpdating = True
_ExcelBookSaveAs($oExcel, $sFilePath2, "xls", 0, 1)
_ExcelBookClose($oExcel)

If MsgBox(4 + 32, "Внимание!", "Файл создан: " & $sFilePath2 & @CRLF & "открыть его сейчас?") = 6 Then
	_ExcelBookOpen($sFilePath2, 1)
Else
	Exit
EndIf

; Функции #################################################################################################################
Func _Saver($parametr, $col)
	$count = 1
	$nOffset = 1

	While 1

		$aNumber = StringRegExp(FileRead($sFilePath1), '<setting name="' & $parametr & '" value="(.*?)"/>', 1, $nOffset)
		If @error = 0 Then
			$nOffset = @extended
		Else
			ExitLoop
		EndIf
		For $i = 0 To UBound($aNumber) - 1
			If $parametr == "start" Then
				Local $aSec[1] = [$aNumber[$i]]
				$sDate = _DateAdd('s', $aSec[$i], '1970/01/01 02:00:00')
				$aNumber[$i] = _DateTimeFormat($sDate, 0)
				$parametr = "Дата совершения звонка:"
				_ExcelWriteCell($oExcel, $parametr, $count, $col)
				$parametr = "start"
				_ExcelWriteCell($oExcel, $aNumber[$i], $count, $col + 1)
			Else
				Switch 1
					Case $parametr == "number"
						$parametr = "Номер телефона:"
					Case $parametr == "duration"
						$parametr = "Длительность разговора сек.:"
					Case $parametr == "comment"
						$parametr = "Комментарий:"
				EndSwitch
				_ExcelWriteCell($oExcel, $parametr, $count, $col)
				Switch 2
					Case $parametr == "Номер телефона:"
						$parametr = "number"
					Case $parametr == "Длительность разговора сек.:"
						$parametr = "duration"
					Case $parametr == "Комментарий:"
						$parametr = "comment"
				EndSwitch
				Switch 3
					Case $aNumber[$i] == "Busy here"
						$aNumber[$i] = "Номер занят"
					Case $aNumber[$i] == "Declined"
						$aNumber[$i] = "Отклонено"
					Case $aNumber[$i] == "Cancelled outgoing call"
						$aNumber[$i] = "Отмена исходящего вызова"
					Case $aNumber[$i] == "Address Incomplete"
						$aNumber[$i] = "Неполный номер"
					Case $aNumber[$i] == "Service Unavailable"
						$aNumber[$i] = "Служба недоступна"
					Case $aNumber[$i] == "Not Found"
						$aNumber[$i] = "Номер не найден"
				EndSwitch
				_ExcelWriteCell($oExcel, $aNumber[$i], $count, $col + 1)
			EndIf
		Next
		$count += 1
	WEnd
	TrayTip("Экспорт значения", $parametr, 30, 1)
EndFunc   ;==>_saver

Func _Autoupdate($iMakeBackup = 1) ;обновление проги с сервера в локалке
	TrayTip("Обновление программы", "Поиск новой версии", 30, 1)
	Local $sPath = "\\192.168.1.1\update\Recentcalls.exe"
	If Ping("192.168.1.1", 300) Then
		If FileExists($sPath) Then
			Local $sUpdate_Version = FileGetVersion($sPath)
			Local $sAppUpdate_AppVersion = FileGetVersion(@ScriptFullPath)
			If _VersionCompare($sUpdate_Version, $sAppUpdate_AppVersion) = 1 Then
				TrayTip("Обновление программы", $sUpdate_Version & " Копирование " & $sPath, 30, 1)
				FileCopy($sPath, @ScriptDir & "\Update_Tmp\", 9)
				If $iMakeBackup Then
					FileCopy(@ScriptFullPath, @ScriptFullPath & ".bak", 1)
				EndIf
				Run(@ComSpec & ' /c Ping -n 2 localhost > nul & xcopy /y /s /c "' & _
						@ScriptDir & '\Update_Tmp\*" "' & @ScriptDir & '\*" & Start "" "' & @ScriptFullPath & '" & RD /S /Q "' & @ScriptDir & '\Update_Tmp"', '', @SW_HIDE)
				Exit
			EndIf
		Else
			TrayTip("", $sPath & " не cуществует!", 30, 1)
		EndIf
	Else
		TrayTip("", "сервер 192.168.1.1  недоступен!", 30, 1)
	EndIf
EndFunc   ;==>_autoupdate

Func _MakeBorderOfCell($oExcel, $Range)
	$oSel = $oExcel.ActiveWorkBook.ActiveSheet.Range($Range)
	With $oSel.Borders($xlEdgeLeft)
		.Weight = $xlThin
	EndWith
	With $oSel.Borders($xlEdgeTop)
		.Weight = $xlThin
	EndWith
	With $oSel.Borders($xlEdgeBottom)
		.Weight = $xlThin
	EndWith
	With $oSel.Borders($xlEdgeRight)
		.Weight = $xlThin
	EndWith
	With $oSel.Borders($xlInsideVertical)
		.Weight = $xlThin
	EndWith
	With $oSel.Borders($xlInsideHorizontal)
		.Weight = $xlThin
	EndWith
EndFunc   ;==>_MakeBorderOfCell

Func _ExcelSortExtended($oExcel, $sKey, $sRangeOrRowStart, $iColStart, $iRowEnd, $iColEnd, $iDirection, $iHeader, $fMatchCase, $iOrientation, $iDataOption)
	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.Range($oExcel.Cells($sRangeOrRowStart, $iColStart), $oExcel.Cells($iRowEnd, $iColEnd)).Sort _
				($oExcel.Range($sKey), $iDirection, $oExcel.Range($sKey), Default, $iDirection, $oExcel.Range($sKey), _
				$iDirection, $iHeader, True, $fMatchCase, $iOrientation, Default, $iDataOption)
	Else
		$oExcel.Range($sRangeOrRowStart).Sort($oExcel.Range($sKey), $iDirection, $oExcel.Range($sKey), Default, _
				$iDirection, $oExcel.Range($sKey), $iDirection, $iHeader, True, $fMatchCase, $iOrientation, Default, $iDataOption)
	EndIf
	Return 1
EndFunc   ;==>_ExcelSortExtended
 

bcxtim

Новичок
Сообщения
1
Репутация
0
Здравствуйте. Спасибо за программу. Пользуемся на работе. Но хотелось бы кое-что добавить. Есть ли у Вас исходник? некомпилированный файл?
 

Bingo888

Новичок
Сообщения
29
Репутация
0
Добрый день! Ребят подскажите как правильно сделать, есть файл .xml нужно с него витащить определение поля и сохранить их в файл ексель по столбикам, после сохранения екселя нужно чтоб файл .xml удалялся сам с дириктории?


#include <GUIConstants.au3>
#include <ListViewConstants.au3>
#include <String.au3>
#include <array.au3>
#include <Excel.au3>

$filepath = @ScriptDir & '\21120220J0103803100000000151220192112.xml'
$sFilePath1 = @ScriptDir & "\save.xls"
If Not FileExists($filepath) Then
MsgBox(16, "Xml parser error", "File not exists")
Exit
EndIf
$filecontent = FileRead($filepath)
If StringInStr($filecontent, "<?xml") <> 1 Then
MsgBox(16, "Xml parser error", "File not validation")
Exit
EndIf
$host = _StringBetween($filecontent, "<HTIN>", "</HTIN>")
;_ArrayDisplay($host)
$oExcel = _Excel_BookOpen($sFilePath1, 1)

;_ExcelWriteCell($oExcel, $host, 1)
_Excel_BookSave($oExcel)
_Excel_BookClose($oExcel)

что не правильно делаю Excel вобще не срабативает, _ExcelWriteCell не отроатываеться.

до строки $filecontent = FileRead($filepath) отрабатываеться нормально но $host = _StringBetween($filecontent, "<HTIN>", "</HTIN>") почемуто странно отрабативает через меседж бокс не выводит на экран.
 

ra4o

Скриптер
Сообщения
992
Репутация
183
что не правильно делаю Excel вобще не срабативает _ExcelWriteCell
Это функция со старой UDF "Excel.au3", в новой смотрите "_Excel_RangeWrite"
Да и вообще со всеми функциями Excel Вы неправильно работаете. Посмотрите пример к "_Excel_RangeWrite" (Есть только на английском языке) , я думаю поймёте что к чему.
OffTopic:
Заключайте текст скрипта в теги

В Вашем случае то , что касается Excel должно выглядеть так :
Код:
$oExcel = _Excel_Open(False); False - запустит Эксель в скрытом виде, что-бы видеть сам процесс можно заменить на True или вообще оставить скобки пустые
$oWorkbook = _Excel_BookOpen($oExcel, $sFilePath1)
_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $host)
_Excel_BookSave($oWorkbook);Можно и эту функцию не выполнять, сохранит и так
_Excel_Close($oExcel)

но $host = _StringBetween($filecontent, "<HTIN>", "</HTIN>") почемуто странно отрабативает через меседж бокс не выводит на экран.
Потому что "$host" - это массив ,а MsgBox массивы не умеет показывать, Вы ведь смотрели массив при помощи "_ArrayDisplay($host)"
 
Верх