|
Из Excel в таблицу
|
|||
---|---|---|---|
#18+
Заведомо мне неизвестно сколько будет строк в excel-таблице. Как прописать в скрипте ,чтобы записала в DW все строки до пустой записи последней строки. И не в одну DW,а в две.Колонку А и Д в dw_1,а колонку А и Е в dw_2?Подскажите, покажите пожалуйста ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2004, 11:25 |
|
Из Excel в таблицу
|
|||
---|---|---|---|
#18+
точно не больше 64K строк =) заливаешь все в datastore (ImportFile), а потом сортируешь по DW Успехов! ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2004, 11:52 |
|
Из Excel в таблицу
|
|||
---|---|---|---|
#18+
Подконнектиться через ODBC и все дела. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2004, 12:02 |
|
Из Excel в таблицу
|
|||
---|---|---|---|
#18+
Лови. Если под "excel-таблице" имеетса ввиду эксэл филе, то думаю енто то что тебе нужно, добавь только эрор чекинг, если нет, то звиняйте, неправильно понял. i_irc = GetFileOpenName('Select File', s_fname1, s_fname2, 'XLS', 'Excel Files (*.XLS),*.XLS') i_irc = FileOpen (s_fname1, StreamMode!, Write!, LockReadWrite!) IF i_irc > 0 THEN FileClose(i_irc) ELSE MessageBox(This.Title, 'Selected file is currently open.~n' + & 'Please close it to continued.', Exclamation!) close(this) RETURN END IF SetPointer(HourGlass!) // Create ole ... ole_book = CREATE oleobject IF NOT IsValid(ole_book) THEN MessageBox(This.Title, 'Create fail.', Exclamation!) DESTROY ole_book close(this) RETURN END IF i_irc = ole_book.ConnectToNewObject('excel.application') IF i_irc <> 0 THEN MessageBox(This.Title, 'Unable to connect to excel application.', Exclamation!) DESTROY ole_book Close(This) RETURN END IF a_any = ole_book.Application.WorkBooks.Open(s_fname1) // Get the Active WorkSheet reference ... ole_sheet = ole_book.ActiveWorkBook.WorkSheets(1) l_last_row = ole_sheet.application.workbooks(1).worksheets(1).Cells.SpecialCells(11).row dw_1.SetRedraw (FALSE) dw_2.SetRedraw (FALSE) FOR l_row = 1 TO l_last_row s_row = string(l_row) s_test = string(ole_sheet.Range('A' + s_row).Value) s_test2 = string(ole_sheet.Range('B' + s_row).Value) s_test3 = string(ole_sheet.Range('D' + s_row).Value) l_row2 = dw_1.InsertRow(0) dw_1.SetItem(l_row2, 'col_1', s_test) dw_1.SetItem(l_row2, 'col_2', s_test2) l_row3 = dw_2.InsertRow(0) dw_2.SetItem(l_row3, 'col_1', s_test3) NEXT dw_1.SetRedraw (TRUE) dw_2.SetRedraw (TRUE) ole_sheet.DisconnectObject() ole_book.Application.Quit ole_book.DisconnectObject() IF IsValid(ole_sheet) THEN DESTROY ole_sheet END IF IF IsValid(ole_book) THEN DESTROY ole_book END IF MirkaЗаведомо мне неизвестно сколько будет строк в excel-таблице. Как прописать в скрипте ,чтобы записала в DW все строки до пустой записи последней строки. И не в одну DW,а в две.Колонку А и Д в dw_1,а колонку А и Е в dw_2?Подскажите, покажите пожалуйста ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2004, 22:55 |
|
Из Excel в таблицу
|
|||
---|---|---|---|
#18+
Можно конечно и так, как у voronk, только будет медленно. Я делаю по другому. 1. Данные из Excel'я имортирую в текстовый файл. 2. Данные из текстового файла импортирую в DataWindow см ImportFromFile(...) Там есть то, что Вам нужно, см. аргументы startColumn и endColumn. Импортировать можно: - вручную - из PB через использование Oleobject, см. пример выше ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2004, 06:47 |
|
Из Excel в таблицу
|
|||
---|---|---|---|
#18+
Я почему так сделал - мне через раз файлы говняные подкидывают, типа там где long должен быть, балбесы втыкают datetime и т.д. Я после "s_test = string(ole_sheet.Range('A' + s_row).Value)", в рабочем коде проверяю с "IsNumber ( string )" и т.д. И если валидация не прошла, выхожу из лупа и выбрасываю MessageBox('', 'Файл не good') ErmakМожно конечно и так, как у voronk, только будет медленно. Я делаю по другому. 1. Данные из Excel'я имортирую в текстовый файл. 2. Данные из текстового файла импортирую в DataWindow см ImportFromFile(...) Там есть то, что Вам нужно, см. аргументы startColumn и endColumn. Импортировать можно: - вручную - из PB через использование Oleobject, см. пример выше ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2004, 18:47 |
|
Из Excel в таблицу
|
|||
---|---|---|---|
#18+
То же самое Вам скажет само DW при выполнении импорта. А уж продолжить импорт, али как, решать Вам, можно продолжить - можно остановиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2004, 08:37 |
|
Из Excel в таблицу
|
|||
---|---|---|---|
#18+
Спасибо,всем кто мне ответил. Здесь задается 100 строк(максимально) в xls файле.Как мне проверять не пустое ли значение в первом и во втором столбце?И если пусто завершить запись в DW ,может быть не 100 строк, а меньше. integer result string file_name SetPointer(HourGlass!) CHOOSE CASE upr1 CASE '1' // MessageBox('Ïðèñîåäèíåíèå',string(upr1)) dw_1.dataobject = "d_fact1" dw_2.dataobject = "d_plan" file_name = "c:\temp\kod.xls" END CHOOSE OLEObject myoleobject myoleobject = CREATE OLEObject result = myoleobject.ConnectToObject(file_name) MessageBox("result",String(result)) integer li_row1, & li_row2, li_col2, & li_row3, li_col3 integer li_quantity_rows if upr1='1' and result = 0 then MessageBox("Ïîäñîåäèíèëèñü ê", upr1+"ðåçóëüòàò"+string(result)) li_quantity_rows = 100 mm = mm for li_row2 = 1 to li_quantity_rows dw_1.InsertRow(0) dw_1.SetItem(li_row2,6,myoleobject.application.workbooks(1).& worksheets(mm).cells(4,4).value) dw_1.SetItem(li_row2,1,myoleobject.application.workbooks(1).& worksheets(mm).cells(5,4).value) dw_1.SetItem(li_row2,2,myoleobject.application.workbooks(1).& worksheets(mm).cells(6,4).value) next for li_row2 = 1 to li_quantity_rows for li_col2 = 3 to 5 dw_1.SetItem(li_row2,li_col2,myoleobject.application.workbooks(1).& worksheets(mm).cells((li_row2 + 9),(li_col2)).value) SetPointer(HourGlass!) next next end if //////////////////////////////////////////////////////////////////////////////////////// result = myoleobject.DisconnectObject ( ) Destroy myoleobject SetPointer(Arrow! ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2004, 11:55 |
|
Из Excel в таблицу
|
|||
---|---|---|---|
#18+
// Цикл выполняется, пока очередное значение ячейки Excel не равно NULL или "" do while (NOT IsNull(string(ole_1.Object.application.workbooks(nWorkBook).& worksheets(nWorkSheet).cells(i, j).value)) or & trim(string(ole_1.Object.application.workbooks(nWorkBook).& worksheets(nWorkSheet).cells(i, j).value)) <> "")... PS: i, j меняем как нужно и идём хочешь по строкам, хочешь по столбцам. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2004, 17:01 |
|
Из Excel в таблицу
|
|||
---|---|---|---|
#18+
Спасибо! В моей таблице данные num_trans is not null.А в файле xls этих данных нет.Когда делаю update dw,выдает ошибку,***.num_trans не может не иметь значений. Мне нужно,чтобы num_trans имело значение "0". ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2004, 12:26 |
|
Из Excel в таблицу
|
|||
---|---|---|---|
#18+
Откуда этот Excel-файл берётся? Если от "балбесов", то: voronkЯ почему так сделал - мне через раз файлы говняные подкидывают, типа там где long должен быть, балбесы втыкают datetime и т.д. Я после "s_test = string(ole_sheet.Range('A' + s_row).Value)", в рабочем коде проверяю с "IsNumber ( string )" и т.д. И если валидация не прошла, выхожу из лупа и выбрасываю MessageBox('', 'Файл не good') Можно программно записывать в DW любое нужное значение, если из Excel пришло NULL, но тогда мы допускаем, что изначально в Excel-таблице могут быть "дырки". Как определить, что таблица в Excel закончилась? Можно считывать какой-нибудь признак, например слово "ИТОГО:" в конце таблицы или , проходя по таблице, одновременно проверять какой-нибудь другой столбец, который никогда не может быть пустым и т. д. ... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2004, 16:59 |
|
|
start [/forum/topic.php?fid=15&msg=32668441&tid=1338903]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
159ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 240ms |
total: | 498ms |
0 / 0 |