powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Excel File Import
20 сообщений из 20, страница 1 из 1
Excel File Import
    #34307479
SvetaSh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача состоит в том чтоб импортировать 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,
а мне нужно импортировать весь фаил.

спасибо за помощь
...
Рейтинг: 0 / 0
Excel File Import
    #34307508
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Excel File Import
    #34307533
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Копать в этом направлении:
Код: plaintext
1.
al_column_count = ole_sheet.UsedRange.Columns(ole_sheet.UsedRange.Columns.Count).Column
al_row_count = ole_sheet.UsedRange.Rows(ole_sheet.UsedRange.Rows.Count).Row

Чтобы не было проблем с типом значений у нас строится динамическое DW. Там все поля текстовые:

Код: plaintext
1.
2.
3.
ls_select = 'SELECT '
...
ls_dwsyntax = SQLCA.SyntaxFromSQL(ls_select, "Style(Type=tabular)", ls_err)
...
...
Рейтинг: 0 / 0
Excel File Import
    #34307812
SvetaSh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UsedRange

give error message
...
Рейтинг: 0 / 0
Excel File Import
    #34307846
SvetaSh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sapsibo,
razobralas' s vashei pomosschiu
...
Рейтинг: 0 / 0
Excel File Import
    #34308134
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvetaShUsedRange

give error message
Вот более доступным языком:
Код: plaintext
1.
l_last_row = ole_sheet.application.workbooks( 1 ).worksheets( 1 ).Cells.SpecialCells( 11 ).row
l_last_column = ole_sheet.application.workbooks( 1 ).worksheets( 1 ).Cells.SpecialCells( 11 ).column

" Копать в этом направлении: " обозначает именно "копать", а не просто переписывать :)
...
Рейтинг: 0 / 0
Excel File Import
    #34308170
ruha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как по мне то через ole тянуть данные по ячейкам имеет смысл только если данные находятся не в табличном виде (большие файлы грузятся ОЧЕНЬ ДОЛГО). если же можно то лучше сохранить через ole excel - евский файл в dbf или txt , а потом сделать импорт ентого файла в dw. еще как вариант написать макрос который преобразует данные как надо и сохранит в файл , а из PB его только запускать . минус в том что на всех машинах придется его устанавливать . плюс - даже если структура файла изменится не придется переписывать программу, а только макрос, но опять же придется на всех тачках обновлять ....
...
Рейтинг: 0 / 0
Excel File Import
    #34308898
AndrewN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно с помощью pipeline!

Эх, разыгралась фантазия... Вариантов мульён с хвостиком. :)
...
Рейтинг: 0 / 0
Excel File Import
    #34320579
SvetaSh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пытаюсь импортировать е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
...
Рейтинг: 0 / 0
Excel File Import
    #34320609
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
держи:
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 на базе эксела тай знать я так и делаю патамушата балбесы мне всё время разные форматы подсовывают.
...
Рейтинг: 0 / 0
Excel File Import
    #34320622
SvetaSh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mne nuzhno ne dw postroit' na baze excel a import into table .
I thought I'd use insert into....
...
Рейтинг: 0 / 0
Excel File Import
    #34320647
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvetaShmne nuzhno ne dw postroit' na baze excel a import into table .
I thought I'd use insert into....

Дык датавиндой и сделай insert.
на базе своей таблицы, напиши процедуру, на базе процедуры построй датавинду, воткни эту датавинду в окно, открой окно, загрузи его своим эксэлом, и скажи:
- датавинда ... трах-тибидух ... Update()
усё, кажетса все так делают, или я чего не так понял?
Тоды звиняйте
...
Рейтинг: 0 / 0
Excel File Import
    #34320797
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
voronkДык датавиндой и сделай insert.
на базе своей таблицы, напиши процедуру, на базе процедуры построй датавинду, воткни эту датавинду в окно, открой окно, загрузи его своим эксэлом, и скажи:
- датавинда ... трах-тибидух ... Update()
усё, кажетса все так делают, или я чего не так понял?
Можно и так. Но самый элементарный, хотя и не оптимальный по скорости, - идти по Excel-ному файлу в цикле построчно, на каждом проходе цикла выдёргивая из него строку данных и засовывая её в БД INSERT-ом. Как правильно подметил тов. ruha, способ тормозной, и для длинных файлов малопригодный. Но зато он требует совершенно минимальных знаний и Excel-а, и эхотага.
...
Рейтинг: 0 / 0
Excel File Import
    #34322532
SvetaSh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000 voronkДык датавиндой и сделай insert.
на базе своей таблицы, напиши процедуру, на базе процедуры построй датавинду, воткни эту датавинду в окно, открой окно, загрузи его своим эксэлом, и скажи:
- датавинда ... трах-тибидух ... Update()
усё, кажетса все так делают, или я чего не так понял?
Можно и так. Но самый элементарный, хотя и не оптимальный по скорости, - идти по Excel-ному файлу в цикле построчно, на каждом проходе цикла выдёргивая из него строку данных и засовывая её в БД INSERT-ом. Как правильно подметил тов. ruha, способ тормозной, и для длинных файлов малопригодный. Но зато он требует совершенно минимальных знаний и Excel-а, и эхотага.

Eto to chto ia i pitaus' sdelat' no Insert daet oshobku.
...
Рейтинг: 0 / 0
Excel File Import
    #34328362
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык у тебя с ole или с datawindow update проблема ???
...
Рейтинг: 0 / 0
Excel File Import
    #34328385
SvetaSh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
...
Рейтинг: 0 / 0
Excel File Import
    #34328423
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvetaSh wrote:

> ne insert i returns (-) number.

Ну так посмотри, что серверу не нравится.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Excel File Import
    #34331808
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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, даст тебе больше объяснений
...
Рейтинг: 0 / 0
Excel File Import
    #34332225
ruha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>> Эх, разыгралась фантазия... Вариантов мульён с хвостиком. :)
есть еще один самый быстрый :) через буфер обмена
в excel selection.copy
в pb ls_str = Clipboard()
получаем строку в которой строки заканчиваются ~r~n , разделители между ячейками ~t
а потом парсить ее
...
Рейтинг: 0 / 0
Excel File Import
    #34332273
Света!!! Юзайте DTS от MSSQL. PowerBuilder предназначен немного для других целей!!! А для перекачки между базами из Excel и dbf лучше всего подходит DTS. <censored>
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Excel File Import
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]