|
|
|
Excel File Import
|
|||
|---|---|---|---|
|
#18+
Задача состоит в том чтоб импортировать exel file into SQL database, используя PowerBuilder. Ето примерно то с чего я начала... integer result, i , j string ls_read OLEObject myoleobject myoleobject = CREATE OLEObject result = myoleobject.ConnectToObject( "c:\temp\test.xls") integer result, i , j string ls_read OLEObject myoleobject myoleobject = CREATE OLEObject result = myoleobject.ConnectToObject( "c:\temp\test.xls") IF result = 0 THEN For i = 1 to 2 for j = 1 to 2 ls_read = myoleobject.application.workbooks(1).worksheets(1).cells(i,j).value messagebox('',ls_read) next next END IF DESTROY myoleobject Ho этот код читает только определенныи cell, а мне нужно импортировать весь фаил. спасибо за помощь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 18:42 |
|
||
|
Excel File Import
|
|||
|---|---|---|---|
|
#18+
SvetaSh wrote: > IF result = 0 THEN > For i = 1 to 2 > for j = 1 to 2 > ls_read = myoleobject.application.workbooks(1).worksheets(1).cells(i,j).value > messagebox('',ls_read) > next > next > END IF > > DESTROY myoleobject > > Ho этот код читает только определенныи cell, БРАВО!!! Ты даже не удосужилась понять, что делает где-то стянутый тобой код! > а мне нужно импортировать весь фаил. Пиши цену - сделаем. На халяву могу подсказать только то, что присвоение ls_read = myoleobject.application.workbooks(1).worksheets(1).cells(i,j).value в принципе может обломаться. Нужно или точно знать тип значений в Excel, или анализировать его из программы. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 18:59 |
|
||
|
Excel File Import
|
|||
|---|---|---|---|
|
#18+
Копать в этом направлении: Код: plaintext 1. Чтобы не было проблем с типом значений у нас строится динамическое DW. Там все поля текстовые: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 19:14 |
|
||
|
Excel File Import
|
|||
|---|---|---|---|
|
#18+
UsedRange give error message ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 22:17 |
|
||
|
Excel File Import
|
|||
|---|---|---|---|
|
#18+
Sapsibo, razobralas' s vashei pomosschiu ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 23:13 |
|
||
|
Excel File Import
|
|||
|---|---|---|---|
|
#18+
SvetaShUsedRange give error message Вот более доступным языком: Код: plaintext 1. " Копать в этом направлении: " обозначает именно "копать", а не просто переписывать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 09:26 |
|
||
|
Excel File Import
|
|||
|---|---|---|---|
|
#18+
как по мне то через ole тянуть данные по ячейкам имеет смысл только если данные находятся не в табличном виде (большие файлы грузятся ОЧЕНЬ ДОЛГО). если же можно то лучше сохранить через ole excel - евский файл в dbf или txt , а потом сделать импорт ентого файла в dw. еще как вариант написать макрос который преобразует данные как надо и сохранит в файл , а из PB его только запускать . минус в том что на всех машинах придется его устанавливать . плюс - даже если структура файла изменится не придется переписывать программу, а только макрос, но опять же придется на всех тачках обновлять .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 09:43 |
|
||
|
Excel File Import
|
|||
|---|---|---|---|
|
#18+
А можно с помощью pipeline! Эх, разыгралась фантазия... Вариантов мульён с хвостиком. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 12:31 |
|
||
|
Excel File Import
|
|||
|---|---|---|---|
|
#18+
пытаюсь импортировать еxcel file Insert line возвращает -1. Подскажите что не в порядке, пожалуиста. FOR l_index = 1 TO l_sheets // Activate each sheet within the workbook ole_excel.application.Workbooks(is_filename).Worksheets(l_index).Activate // Count the number of columns l_xls_cols = ole_excel.application.workbooks(is_filename).worksheets(l_index).Usedrange.columns.count // Count the number of rows l_xls_rows = ole_excel.application.workbooks(is_filename).worksheets(l_index).Usedrange.rows.count hpb_1.MaxPosition = l_xls_rows hpb_1.Position = 0 l_line_no = 1 For i = 5 to 5 hpb_1.Position = hpb_1.Position + i l_line_descr = ole_excel.application.workbooks(1).worksheets(2).cells(i,4).value l_gl = ole_excel.application.workbooks(1).worksheets(2).cells(i,13).value l_unit_price = ole_excel.application.workbooks(1).worksheets(2).cells(i,11).value l_ac = ole_excel.application.workbooks(1).worksheets(2).cells(i,15).value Select oid into :l_ac_oid from aircraft_data where aircraft_id = :l_ac ; l_city = ole_excel.application.workbooks(1).worksheets(2).cells(i,18).value Select oid into :l_city_oid from location_master where location_id = :l_city ; l_proj_oid = ole_excel.application.workbooks(1).worksheets(2).cells(i,16).value l_dept_oid = ole_excel.application.workbooks(1).worksheets(2).cells(i,17).value Insert into account_data (account_header_oid, type_sym, status_sym, Line_no, Unit_price) Values (:l_ac_header_oid, :l_type_sym, :l_status_sym, :l_line_no, :l_unit_price); ret = SQLCA.SQLCode If SQLCA.SQLCode <> 0 then messagebox("", SQLCA.SQLErrtext) end if commit; l_line_no = l_line_no + 1 next // Give the result of columns and rows Messagebox('Info',"Columns: "+string(l_xls_cols)+ " - Rows:"+string(l_xls_rows) ) NEXT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2007, 21:02 |
|
||
|
Excel File Import
|
|||
|---|---|---|---|
|
#18+
держи: i_rc = GetFileOpenName('Select File', s_fname1, s_fname2, 'XLS', 'Excel Files (*.XLS),*.XLS') i_file_num = FileOpen (s_fname1, StreamMode!, Write!, LockReadWrite!) ole_book = CREATE oleobject IF NOT IsValid(ole_book) THEN MessageBox(This.Title, 'Create fail.', Exclamation!) DESTROY ole_book RETURN END IF i_rc = ole_book.ConnectToNewObject('excel.application') a_any = ole_book.Application.DisplayAlerts = FALSE a_any = ole_book.Application.WorkBooks.Open(s_fname1) // это на случай если у тебя больше чем один воркщит l_worksheet_knt = ole_book.Worksheets.Count IF l_worksheet_knt > 1 THEN FOR l_idx = 1 TO l_worksheet_knt s_work_sheet_name[l_idx] = ole_book.Worksheets(l_idx).Name l_work_sheet_idx[l_idx] = l_idx NEXT i_str_pass.s[] = s_work_sheet_name[] i_str_pass.d[] = l_work_sheet_idx[] message.fnv_set_str_pass(i_str_pass) // w_parm_import_sheets = Просто построй окошко куда передаш аррэи и даш юзверю возможность выбрать нужный воркщит ... open(w_parm_import_sheets) i_str_pass = Message.fnv_get_str_pass() Message.fnv_clear_str_pass() CHOOSE CASE i_str_pass.s_action CASE 'ok' l_worksheet_knt = i_str_pass.d[1] CASE ELSE 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 close(this) RETURN END CHOOSE END IF ole_sheet = ole_book.ActiveWorkBook.WorkSheets(l_worksheet_knt) ole_book.Workbooks(1).Worksheets(l_worksheet_knt).select ole_book.ActiveCell.CurrentRegion.Select() ole_book.Selection.Copy() l_row = dw_твоё_куда_надо_затянуть.ImportClipBoard(2) ClipBoard('') 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 Если надо динамически построить dw на базе эксела тай знать я так и делаю патамушата балбесы мне всё время разные форматы подсовывают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2007, 21:33 |
|
||
|
Excel File Import
|
|||
|---|---|---|---|
|
#18+
mne nuzhno ne dw postroit' na baze excel a import into table . I thought I'd use insert into.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2007, 21:44 |
|
||
|
Excel File Import
|
|||
|---|---|---|---|
|
#18+
SvetaShmne nuzhno ne dw postroit' na baze excel a import into table . I thought I'd use insert into.... Дык датавиндой и сделай insert. на базе своей таблицы, напиши процедуру, на базе процедуры построй датавинду, воткни эту датавинду в окно, открой окно, загрузи его своим эксэлом, и скажи: - датавинда ... трах-тибидух ... Update() усё, кажетса все так делают, или я чего не так понял? Тоды звиняйте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2007, 22:05 |
|
||
|
Excel File Import
|
|||
|---|---|---|---|
|
#18+
voronkДык датавиндой и сделай insert. на базе своей таблицы, напиши процедуру, на базе процедуры построй датавинду, воткни эту датавинду в окно, открой окно, загрузи его своим эксэлом, и скажи: - датавинда ... трах-тибидух ... Update() усё, кажетса все так делают, или я чего не так понял? Можно и так. Но самый элементарный, хотя и не оптимальный по скорости, - идти по Excel-ному файлу в цикле построчно, на каждом проходе цикла выдёргивая из него строку данных и засовывая её в БД INSERT-ом. Как правильно подметил тов. ruha, способ тормозной, и для длинных файлов малопригодный. Но зато он требует совершенно минимальных знаний и Excel-а, и эхотага. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2007, 00:19 |
|
||
|
Excel File Import
|
|||
|---|---|---|---|
|
#18+
Dim2000 voronkДык датавиндой и сделай insert. на базе своей таблицы, напиши процедуру, на базе процедуры построй датавинду, воткни эту датавинду в окно, открой окно, загрузи его своим эксэлом, и скажи: - датавинда ... трах-тибидух ... Update() усё, кажетса все так делают, или я чего не так понял? Можно и так. Но самый элементарный, хотя и не оптимальный по скорости, - идти по Excel-ному файлу в цикле построчно, на каждом проходе цикла выдёргивая из него строку данных и засовывая её в БД INSERT-ом. Как правильно подметил тов. ruha, способ тормозной, и для длинных файлов малопригодный. Но зато он требует совершенно минимальных знаний и Excel-а, и эхотага. Eto to chto ia i pitaus' sdelat' no Insert daet oshobku. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 05:19 |
|
||
|
Excel File Import
|
|||
|---|---|---|---|
|
#18+
Дык у тебя с ole или с datawindow update проблема ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2007, 19:27 |
|
||
|
Excel File Import
|
|||
|---|---|---|---|
|
#18+
problema s etim statement... Insert into account_data (account_header_oid, type_sym, status_sym, Line_no, Unit_price) Values (:l_ac_header_oid, :l_type_sym, :l_status_sym, :l_line_no, :l_unit_price); ne insert i returns (-) number. spasibo sa pomosch. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2007, 19:34 |
|
||
|
Excel File Import
|
|||
|---|---|---|---|
|
#18+
SvetaSh wrote: > ne insert i returns (-) number. Ну так посмотри, что серверу не нравится. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2007, 19:48 |
|
||
|
Excel File Import
|
|||
|---|---|---|---|
|
#18+
SvetaShproblema s etim statement... Insert into account_data (account_header_oid, type_sym, status_sym, Line_no, Unit_price) Values (:l_ac_header_oid, :l_type_sym, :l_status_sym, :l_line_no, :l_unit_price); ne insert i returns (-) number. spasibo sa pomosch. Света, то что ты написала, это не datawindow update, используй datawindow и твоя жизнь будет легче. Ну а если всё равно не хочеш делать по человечески, запусти sql profiler, глянь шо там происходит и то что ты посылаеш, апдейт твой, кат и пэйст в query analyzer, execute, results pane, даст тебе больше объяснений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2007, 00:48 |
|
||
|
Excel File Import
|
|||
|---|---|---|---|
|
#18+
>> Эх, разыгралась фантазия... Вариантов мульён с хвостиком. :) есть еще один самый быстрый :) через буфер обмена в excel selection.copy в pb ls_str = Clipboard() получаем строку в которой строки заканчиваются ~r~n , разделители между ячейками ~t а потом парсить ее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2007, 09:57 |
|
||
|
|

start [/forum/topic.php?fid=15&msg=34308898&tid=1337332]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
239ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 232ms |
| total: | 586ms |

| 0 / 0 |
