powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Экспорт таблицы из txt файла в excel используя разделители
29 сообщений из 29, показаны все 2 страниц
Экспорт таблицы из txt файла в excel используя разделители
    #34894983
Toxamor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как это все можно осуществить? Необходимо это все, чтобы передать содержание datawindow в excel. Сохраняю все строки отчета через saveasascii, открывая через Excel напрямую ручками отчет отлично выглядит. Хочу сделать тоже самое, только используя PB, создаю ole объект, соединяю его с excel.application, а вот дальше ступор, используя функцию Open для этого объекта получаю первый столбец, в каждой ячейке которого записаны строчки текстового файла. Возможно ли открыть этот файл учитывая разделители? Куда копать?
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #34895024
md_zuzu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
копай в сторону Copy/Paste
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #34895092
Toxamor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если не трудно, можно по подробнее? Копировать данные из datawindow, подцепить Ole объект к экселю и вставить данные в него? Но при такой процедуре вставляются все данные, а так как прога досталась по наследству и тогда не задумывались еще над вопросом передачи отчетов в эксель, то есть много левых столбцов, которые потом удалять через скрипт. И кажется при использовании функции Paste не передаются названии столбцов? Или я ошибаюсь?
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #34895125
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Toxamor wrote:

> Куда копать?

В сторону остальных параметров функции Open() ;).
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #34895157
Toxamor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а какой параметр функции open передает экселю что открываем текстовый файл с разделителем ,?:)
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #34895171
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Toxamor wrote:

> а какой параметр функции open передает экселю что открываем текстовый
> файл с разделителем ,?:)

4-й.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #34895209
Toxamor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>> а какой параметр функции open передает экселю что открываем текстовый
>> файл с разделителем ,?:)

>4-й.

sourcestorage? Какое значение тогда нужно?
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #34895224
Toxamor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То есть функция будет ob.Application.WorkBooks.Opentext(filename,...,...,",")?
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #34895230
Toxamor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В смысле не opentext, a open
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #34895256
KOLCHOZ_POSTEVENT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Data window в Excel?
Так есть же функция Saveas.Приходилось её пользовать по жизни.
Чтоб сохраняемый файл нормально открылся екселем,поставить тип файла Excel5! или text!,а так как имя файла вы сами задаёте,то не стесняйтесь,ставьте расширение .xls.
Мне приходлось так забивать биржевый отчёт из dw в excel,давно было,но работало.
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #34895302
Toxamor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>Так есть же функция Saveas.Приходилось её пользовать по жизни.
>Чтоб сохраняемый файл нормально открылся екселем,поставить тип файла Excel5! или text!,а так >как имя файла вы сами задаёте,то не стесняйтесь,ставьте расширение .xls.
>Мне приходлось так забивать биржевый отчёт из dw в excel,давно было,но работало.[/quot]
Использование данной функции не устраивает тем, что передаются все данные, но юез названий столбцов и итогов по группам, как и названия самих групп, то есть приходится все это потом приводить в соответствующий вид, а если сохранять в формате ascii, то все эти данные есть, остается только выгрузить их в Excel
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #34895314
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Toxamor wrote:

> sourcestorage? Какое значение тогда нужно?

Посмотри в Help-е по VBA...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #34895558
KOLCHOZ_POSTEVENT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пардон,названия столбцов эта saveas выдаёт,есть там 3-й параметр,его надо поставить на true.
Более того,если вы вскроете сорс data window и поменяете значение параметра колонки data window ,который зовётся dbname,на что-то типа "Я ушёл в кино",то в екселе в заголовке появится "Я ушёл в кино".
У экстернал datawindow это свойство доступно из пейнтера.
Что касается вычислемых полей-ваша правда-не покажет,где бы они не были в строке или в трейлере.
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #34896115
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Матка боска! Как же мучаются люди у которых нету 55€ на покупку dw2xls!
Аж слезы на глаза наворачиваются от жалости.
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #34898884
Toxamor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну я сильно не мучался, просто было самому интересно, да и начальник сказал: пусть программа выгружает данные в эксель, а то что я могу написать служебку чтобы мне купили библиотеку dw2xls за 55 евро, не сказал да и думаю не скажет:), политика не та. Да и идеальное совпадение не требуется... Спасибо всем кто откликнулся, пошел через экспорт в ascii, затем покопался в хелпе по VBA, конкретно по функции, нарыл то что нужно и теперь все замечательно работает:)
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #34899521
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗоринАндрейМатка боска! Как же мучаются люди у которых нету 55€ на покупку dw2xls!
Аж слезы на глаза наворачиваются от жалости.

+1/
хотя я ее купил еще за 22 бакса ;) сделали б чтоль для х-усср по 22 бакса, а для злых буржуев по 55 евро...
Хотя...
Стоящая весчь!
Но 22 бакса не так жалко ;)
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #34904982
Toxamor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мда, теперь начальство кинуло в другую сторону, необходимо все это переписать под опенофисовский Calc. Начал потихоньку разбираться, но столкнулся вот с чем:

o1 = CREATE oleobject
li_n = o1.ConnectToNewObject("com.sun.star.ServiceManager")
IF li_n <> 0 THEN
MessageBox('Ошибка соединения с OpenOffice!', 'Код = ' + String(li_n),StopSign!)
DESTROY o1
Return
END IF


ole_document=create oleobject
ole_desctop=CREATE oleobject
dispatcher=create oleobject
ole_desctop = o1.CreateInstance('com.sun.star.frame.Desktop')
ole_document = ole_desctop.LoadComponentFromURL('file:///' + ls_path, "_blank", 0,b_array)

Все работает нормально, но проблема в кодировке, данные попросту отображаются не в windows_1251. Порылся в документации и нашел то, что за фильтр открытия отвечает четвертый параметр, который массив. Но никак не соображу, как его задать. Также нашел код, который, как я понял, открывает текстовый файл с разделителями, о чем я спрашивал раньше.

Dim Doc As Object
Dim FileProperties(0) As New com.sun.star.beans.PropertyValue
Dim Url As String
Url = "file:///C:/csv.doc"
FileProperties(0).Name = "FilterName"
FileProperties(0).Value ="scalc: Text - txt - csv (StarOffice Calc)"
Doc = StarDesktop.loadComponentFromURL(Url, "_blank", 0, FileProperties())

Но язык - Basic. Пишу на билдере недавно и никак не могу понять, как мне задать этот четвертый параметр? который в примере FileProperties?
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #34905073
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
похоже соответствует массиву структур
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #34905112
Toxamor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
До этого я не додумался, а ведь правда похоже, а как задать тип данной структуры, в коде это вроде бы com.sun.star.beans.PropertyValue.
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #34905423
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
элементы - string или массив char
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #34905539
Toxamor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
spas2001элементы - string или массив char
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца

Ну то что элементы string я понял, но все равно при вызове loadcomponentfromurl при следующим коде:

dw_2.SaveAs(ls_path,csv!,false)
s_oofilter lstr_filtr
lstr_filtr.Name = "FilterName"
lstr_filtr.Value ="scalc: Text - txt - csv (StarOffice Calc)"

ole_document=create oleobject
ole_desctop=CREATE oleobject

ole_desctop = o1.CreateInstance('com.sun.star.frame.Desktop')
ole_document = ole_desctop.LoadComponentFromURL('file:///' + ls_path, "_blank", 0,lstr_filtr)



Вылетает ошибка (вложена). Вообще мне кажется что все проблемы в кодировке из-за типа сохраняемого файла - excel5!, потому что, когда открываешь файл экселем, сохраняешь в формате ексель 2000, а потом открываешь документ в OOo, то все отображается нормально.
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #34905548
Toxamor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #34905677
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше наверное не create, а ConnectToNewObject
и обращаться используя object
А что мешает сохранить в exel8!
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #34905827
Toxamor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
spas2001Лучше наверное не create, а ConnectToNewObject
и обращаться используя object
А что мешает сохранить в exel8!
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
ну функция коннект используется выше по скрипту, когда мы подключаем сервисменеджер. Может где то и ошибаюсь, просто в качестве вдохновления я использую документацию по openoffice.org basic, а там сказано то, что необходимо сначала подключить класс сервис, через коннект, а потом create. И уже затем открывать существующий документ. А насчет 8й версии эксель, пишем мы на 8 билдере, там в помощи его просто нет:( край, это 5.
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #34908283
Toxamor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С кодировкой разобрался, сохраняю документ в формате CSV, далее подключаю все нужные сервисы OOo, и открываю документ, сохраненный ранее. При этом задаю значения массива, которые указывают на то, что при открытии нужно использовать фильтр для csv.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
integer li_par
string ls_url
string ls_temp[]

oleobject l_objservicemanager
oleobject l_objdesctop
oleobject l_objdocument
oleobject l_objcorereflection
oleobject l_objPropertyClass
oleobject l_objproperty[]

l_objservicemanager=create oleobject


li_par=l_objservicemanager.connecttonewobject("com.sun.star.ServiceManager")

l_objdesctop = l_objservicemanager.CreateInstance('com.sun.star.frame.Desktop')

l_objCoreReflection=l_objservicemanager.createInstance("com.sun.star.reflection.CoreReflection")

l_objPropertyClass=l_objCoreReflection.forName("com.sun.star.beans.PropertyValue")

l_objPropertyClass.createObject(REF l_objProperty[ 1 ])

l_objPropertyClass.createObject(REF l_objProperty[ 2 ])

l_objProperty[ 1 ].name = "FilterName"

l_objProperty[ 1 ].Value = "Text - txt - csv (StarCalc)"

l_objProperty[ 2 ].name = "FilterOptions"

l_objProperty[ 2 ].Value = "44"


ls_url='file:///C:/1.csv'

l_objdocument=l_objdesctop.loadcomponentfromurl(ls_url,"_blank", 0 ,l_objProperty)


destroy l_objservicemanager


Все отлично работает, но есть одно но: по умолчанию ООо открывает документ используя в качестве разделителя запятую, что неуместно, так как есть запятые и в ячейках. Может кто нибудь поделиться советом, какой параметр FilterOptions крутить, чтобы явно задать этот разделитель, или кинет ссылочку на документы. http://community.i-rs.ru/ уже просмотрел, вроде бы там нет примеров с конкретным разделителем. Буду благодарен:)
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #34908715
Toxamor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
разобрался, нужна была еще одна срока массива, которая определяла filterflags
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #34959125
txt не нужен
Это простой и быстрый вариант (фрагмент выдернут из окружения - надо подчистить)
Много кода потому что не выгружаются невидимые колонки (права доступа и тп)



// Приемлемо для переноса Grid в EXCEL
// Перенос наименований и порядка колонок
// Проверка видимости колонок

String objname,dbname,name,buferror,names[]
long colcount,i
String s_band,s_x,s_text,head[],ls_report,s_type
Long maxi,Headx[],k,row,pos,n
boolean acccolumn[]
string dwtype,sbuff='',format[],sbuff1
pointer oldpointer


oldpointer=SetPointer(HourGlass!)
string viz,vizc
long cds
string tempfile


// создание буфера для выгрузки данных
datastore ds
ds=create datastore
//if DataObject='dw_blank' then // для отчетов - блокировка вылета при непр имени
// ds.dataobject=dwname
//else
// ds.dataobject=dataobject
//end if

string dwSyntax,errmess
dwSyntax = Describe("datawindow.syntax")
ds.Create (string(dwSyntax) , errmess )
if errmess<>'' then
messagebox('Ошибка создания буфера!',errmess)
return ''
end if




// динамическая перегрузка


//dsfromlib(ds,ds.dataobject,'')




dwtype=Describe("DataWindow.Processing")
setwidth() // корректировка ширины "схлопнутых" колонок

// Цикл по объектам
// Список комментарий колонок из заголовков по совпадению координат
pos=1
n=0
ls_report =trim(Describe("DataWindow.Objects") )
//string dwcollist[] // список живых колонок
//messagebox('',ls_report)
DO WHILE len(ls_report)>0 and pos>0
pos=pos(ls_report,char(9))
if pos=0 then
ObjName=trim(ls_report)
Else
ObjName=left(ls_report,pos - 1)
End IF
ls_report =trim(mid(ls_report,pos + 1))
s_band=Describe(Objname+'.band')
s_x=Describe(Objname+'.x')
s_text=Describe(Objname+'.text')
s_type=Describe(Objname+'.type')

// список объектов заголовка с координатами
if s_type='compute' and s_x<>'?' and s_band='header' and (s_text='?' or s_text='!') then // для заголовков в виде compute
s_text=Describe("evaluate('"+Objname+"',1)")
end if
if s_x<>'?' and s_band='header' and s_text<>'!' and s_text<>'?' then
n=n+1
Head [n]=s_text
Headx[n]=long(s_x)
End If
LOOP

maxi=0
colcount=long(ds.object.datawindow.column.count)



if RowsCopy(1,rowcount(),Primary!,ds,999999999,Primary!)=-1 then
messagebox('Внимание','Ошибка копирования в буфер!')
end if


// Цикл по column
FOR i = 1 TO colcount
objname=ds.describe('#'+trim(string(i))+'.name')
acccolumn =false
// исключение недоступных колонок из заголовка и данных
viz=dwcomp(describe(objname+'.visible'))
if left(viz,1)<>'1' then // базовое значение - невидимо (напр по правам доступа)
// для расчетной видимости мб случай когда видимость тех или иных колонок включаеся после
// формирования отчета в зависимости от нек флагов
vizc=trim(mid(viz,3))
if len(vizc)>0 then // есть расчетное значение
vizc=Describe('evaluate("'+vizc+",1)")
viz=vizc
end if
if left(viz,1)<>'1' then
buferror=ds.Modify("destroy column "+objname)
if buferror<>'' then
messagebox('Ошибка!',buferror)
end if
Continue
end if
end if
acccolumn=true
s_x =Describe(Objname+'.x')
// заголовок из базы
if dwtype<>'1' then // не grid грузим из базы
name=getcolname(dbname)
Else
name='??'
End if
if name='??' then
pos=1
s_text=''
if dwtype='1' then // grid
// имя-комментарий = сумме строк объекта заголовка с такой координатой
DO WHILE pos>0
pos=alscan(Headx,long(s_x))
if pos>0 then
s_text=s_text+head[pos]+' '
Headx[pos]=-1
End If
LOOP
End If
If s_text<>'' then
name=s_text
Else
//if dwtype='1' then // grid из базы еще не грузили
// name=getcolname(dbname) // это лишний тормоз!!
//End if
if name='??' then
name=objname
//name='??'+string(maxi)
End if
End If
End if
Name=strtran(strtran(strtran(name,char(10),' '),char(13),' '),'"','')
names[upperbound(names)+1]=name
NEXT

cds=long(ds.object.datawindow.column.count)
if cds>256 then
messagebox('Внимание','Число колонок превышает возможности Excel (>256), ' +string(cds - 256)+ ' колонок справа удаленo!')
for i=257 to cds
buferror=ds.Modify("destroy column #"+string(i))
if buferror<>'' then
messagebox('Ошибка!',buferror)
end if
next
//return ''
end if


// Сохраняем в файл
tempfile=WORK_DIR+"\tmp\"+string(Now(),'ddmmyy')+string(Now(),'hhss')+'.xls'
ds.saveas(tempfile,Excel5!,false) // данные
maxi=long(ds.object.datawindow.column.count)
destroy ds









// Загружаем Excel

OLEObject ole_1
OLEObject sheet
ole_1 = CREATE OLEObject
int result
result = ole_1.ConnectToNewObject("excel.application")

if result<0 then
Messagebox('Внимание!','Ошибка соединения с Excel',Stopsign!)
Goto EndProg
end if

ole_1.workbooks.open(tempfile)
if not bclose then
ole_1.Application.Visible = True
end if
sheet=ole_1.Application.workbooks(1).worksheets(1)

//Заполняем шапку
sheet.Rows(1).Insert()
//maxi=upperbound(names)
OLEObject selection
maxi=upperbound(names)
for i =1 to maxi
sheet.cells[1,i]=names
next
if bclose then
ole_1.Application.Workbooks(1).save()
ole_1.Application.quit()
end if

//
EndProg:
ole_1.disconnectobject()
DESTROY ole_1
DESTROY sheet
//filedelete(tempfile)



SetPointer(oldpointer)
return (tempfile)
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #34961242
Toxamor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, поковыряю:)
...
Рейтинг: 0 / 0
Экспорт таблицы из txt файла в excel используя разделители
    #35104711
не нашёл примера кода - но я делал это так.. Сначала выгружал в Txt файл, а потом через OLE открывал Excel без документа.. И через ОЛе писал текст полученный при открытии текстового файла (не нужное выкинуть):

Workbooks.OpenText Filename:= _
"C:\Documents and Settings\111\222\333.021", Origin:=866, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:=False _
, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _
Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1)), _
TrailingMinusNumbers:=True
...
Рейтинг: 0 / 0
29 сообщений из 29, показаны все 2 страниц
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Экспорт таблицы из txt файла в excel используя разделители
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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