Что нового

[Данные, строки] Вставка данных массива в Excel

Vitorio

Новичок
Сообщения
18
Репутация
0
Приветствую Светлые Головы!
Может оффтоп, но по форуму ответа не нашёл.

Имеется скрипт (фрагмент), который выбирает данные из таблицы Oracle и должен вставить в файл Excel:
Код:
#include <Array.au3>
#include <ADO.au3>
#include <Excel.au3>
#include <MsgBoxConstants.au3>
#include <Log.au3>

; Create application object
Local $oExcel = _Excel_Open()
If @error Then Exit MsgBox(16, "Excel Error", "Error creating the Excel application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended)

; Строим коннект на базу
Local $oConnection = _ADO_Connection_Create()
Local $sConnectionString = 'DRIVER={' & $sODBCDrv & '};DBQ=' & $sODBCDs & ';uid=' & $sODBCu & ';pwd=' & $sODBCp & ';'
;_ODBC_OpenConnection($sConnectionString)
If _ADO_Connection_OpenConString($oConnection, $sConnectionString) Then
	  _Log_Report($hLog, 'Connected to Oracle')
   Else
	  _Log_Report($hLog, 'Connected to Oracle - FALSE!!!')
   Exit
Endif

Local $sSQLMain = "SELECT p1,p2,p3,p4,p5,p6,p_ss," & _
						"p1_0100,p1_0200,p1_0400,p1_0800,p1_0900,p1_1000," & _
						"p2_0100,p2_0200,p2_0400,p2_0800,p2_0900,p2_1000," & _
						"p3_0100,p3_0200,p3_0400,p3_0800,p3_0900,p3_1000," & _
						"p4_0100,p4_0200,p4_0400,p4_0800,p4_0900,p4_1000," & _
						"p5_0100,p5_0200,p5_0400,p5_0800,p5_0900,p5_1000," & _
						"sr_0100,sr_0200,sr_0400,sr_0800,sr_0900,sr_1000," & _
						"t_0100,t_0200,t_0400,t_0800,t_0900,t_1000," & _
						"d_0100,d_0200,d_0400,d_0800,d_0900,d_1000 " & _
						" FROM work_table order by p1,p4"

Local $oArraySqlMain = _ADO_Execute($oConnection, $sSQLMain, False)
Local $aArraySqlMain = _ADO_Recordset_ToArray($oArraySqlMain,False)
Local $aData = $aArraySqlMain[2]

_ArrayDisplay($aData,'Array aData')

; *****************************************************************************
; Open an existing workbook and return its object identifier.
; *****************************************************************************
Local $sWorkbook = @ScriptDir & "\rez_tab.xls"
Local $oWorkbook = _Excel_BookOpen($oExcel, $sWorkbook)

If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel Error!!!", "Error opening '" & $sWorkbook & "'." & @CRLF & "@error = " & @error & ", @extended = " & @extended)

_Excel_RangeWrite($oWorkbook,"All",$aData,"A6")
;ConsoleWrite("$aData [0][5] =" & $aData [0][5] & @CRLF)
If @error Then Exit MsgBox($MB_SYSTEMMODAL, "_Excel_RangeWrite", "Error writing to worksheet." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
MsgBox($MB_SYSTEMMODAL, "_Excel_RangeWrite", "Gotovo!")

_ADO_Connection_Close($oConnection)


Массив данных $aData формируется, но при попытке вставить в ячейку ("A6") ничего не происходит.
Сообщений об ошибках тоже нет.
Насколько я понял (или не понял) из примеров работы с UDF Excel.au3, в частности с _Excel_RangeWrite (Example 3),
всё должно работать.
В чём "собака порылась"?
При вставке элемента массива типа
Код:
_Excel_RangeWrite($oWorkbook,"All",$aData[0][5],"A6")

всё работает.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Vitorio
Надеюсь, у вас этот пример работает? ;)

Может Excel'ю не нравится какой-нибудь конкретный элемент массива. Попробуйте перебрать их по отдельности, примерно так
Код:
For $i = 0 To 5
  _Excel_RangeWrite($oWorkbook,"All",$aData[0][$i], Chr(65 + $i) & "6" )
Next
 
Автор
V

Vitorio

Новичок
Сообщения
18
Репутация
0
InnI сказал(а):
Vitorio
Надеюсь, у вас этот пример работает? ;)

С этим всё в порядке - работает. А вот мой "Exampl" ни в какую.
Вариант с
InnI сказал(а):
Vitorio
Код:
For $i = 0 To 5
  _Excel_RangeWrite($oWorkbook,"All",$aData[0][$i], Chr(65 + $i) & "6" )
Next
не подходит в моём случае. У меня запрос возвращает 55 столбцов, а здесь после Chr(90) (столбец "Z") начинаются спецсимволы,
а в Excel нужно вставлять дальше в столбцы "AA","AB" и т.д. до "BC".
Да и строк порядка 10к.
Может есть ещё какие варианты залить этот массив?
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Vitorio
Да и строк порядка 10к.
Может, какие ограничения срабатывают, как здесь, например: http://autoit-script.ru/index.php?topic=21621.0
Попробуйте на части массив разбить.
 
Автор
V

Vitorio

Новичок
Сообщения
18
Репутация
0
На счёт ограничений уже проверил - влажу легко в 255 столбцов и 65к строк :(


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

"Переспал" с мыслью:
Может Excel'ю не нравится какой-нибудь конкретный элемент массива.
В итоге - проблема решена!!! Функция "нарывалась" на пустое значение одного из столбцов ("null")
и без оглашения какой-либо ошибки тупо не вставляла ничего в Excel.
Спасибо InnI!
 

nicki2004

Новичок
Сообщения
13
Репутация
1
где скачать ADO.au3 ?

нашел https://www.autoitscript.com/forum/files/file/389-adoau3-udf/
 
Верх