powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Из Excel в таблицу
11 сообщений из 11, страница 1 из 1
Из Excel в таблицу
    #32668441
Mirka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Заведомо мне неизвестно сколько будет строк в excel-таблице. Как прописать в скрипте ,чтобы записала в DW все строки до пустой записи последней строки. И не в одну DW,а в две.Колонку А и Д в dw_1,а колонку А и Е в dw_2?Подскажите, покажите пожалуйста
...
Рейтинг: 0 / 0
Из Excel в таблицу
    #32668517
rcryo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
точно не больше 64K строк =)
заливаешь все в datastore (ImportFile), а потом сортируешь по DW

Успехов!
...
Рейтинг: 0 / 0
Из Excel в таблицу
    #32668549
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подконнектиться через ODBC и все дела.
...
Рейтинг: 0 / 0
Из Excel в таблицу
    #32674363
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лови.
Если под "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?Подскажите, покажите пожалуйста
...
Рейтинг: 0 / 0
Из Excel в таблицу
    #32674446
Ermak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно конечно и так, как у voronk, только будет медленно.
Я делаю по другому.
1. Данные из Excel'я имортирую в текстовый файл.
2. Данные из текстового файла импортирую в DataWindow см ImportFromFile(...)
Там есть то, что Вам нужно, см. аргументы startColumn и endColumn.

Импортировать можно:
- вручную
- из PB через использование Oleobject, см. пример выше
...
Рейтинг: 0 / 0
Из Excel в таблицу
    #32676217
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я почему так сделал - мне через раз файлы говняные подкидывают, типа там где 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, см. пример выше
...
Рейтинг: 0 / 0
Из Excel в таблицу
    #32676592
Ermak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То же самое Вам скажет само DW при выполнении импорта.
А уж продолжить импорт, али как, решать Вам, можно продолжить - можно остановиться.
...
Рейтинг: 0 / 0
Из Excel в таблицу
    #32679021
Mirka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо,всем кто мне ответил.
Здесь задается 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!
...
Рейтинг: 0 / 0
Из Excel в таблицу
    #32679846
Fasimba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
// Цикл выполняется, пока очередное значение ячейки 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 меняем как нужно и идём хочешь по строкам, хочешь по столбцам.
...
Рейтинг: 0 / 0
Из Excel в таблицу
    #32681187
Mirka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!
В моей таблице данные num_trans is not null.А в файле xls этих данных нет.Когда делаю update dw,выдает ошибку,***.num_trans не может не иметь значений. Мне нужно,чтобы num_trans имело значение "0".
...
Рейтинг: 0 / 0
Из Excel в таблицу
    #32681890
Fasimba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Откуда этот Excel-файл берётся? Если от "балбесов", то:
voronkЯ почему так сделал - мне через раз файлы говняные подкидывают, типа там где long должен быть, балбесы втыкают datetime и т.д.

Я после "s_test = string(ole_sheet.Range('A' + s_row).Value)", в рабочем коде проверяю с "IsNumber ( string )" и т.д. И если валидация не прошла, выхожу из лупа и выбрасываю MessageBox('', 'Файл не good')
Можно программно записывать в DW любое нужное значение, если из Excel пришло NULL, но тогда мы допускаем, что изначально в Excel-таблице могут быть "дырки". Как определить, что таблица в Excel закончилась?
Можно считывать какой-нибудь признак, например слово "ИТОГО:" в конце таблицы или , проходя по таблице, одновременно проверять какой-нибудь другой столбец, который никогда не может быть пустым и т. д. ...
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Из Excel в таблицу
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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