|
|
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
Как это все можно осуществить? Необходимо это все, чтобы передать содержание datawindow в excel. Сохраняю все строки отчета через saveasascii, открывая через Excel напрямую ручками отчет отлично выглядит. Хочу сделать тоже самое, только используя PB, создаю ole объект, соединяю его с excel.application, а вот дальше ступор, используя функцию Open для этого объекта получаю первый столбец, в каждой ячейке которого записаны строчки текстового файла. Возможно ли открыть этот файл учитывая разделители? Куда копать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 16:38 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
копай в сторону Copy/Paste ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 16:48 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
Если не трудно, можно по подробнее? Копировать данные из datawindow, подцепить Ole объект к экселю и вставить данные в него? Но при такой процедуре вставляются все данные, а так как прога досталась по наследству и тогда не задумывались еще над вопросом передачи отчетов в эксель, то есть много левых столбцов, которые потом удалять через скрипт. И кажется при использовании функции Paste не передаются названии столбцов? Или я ошибаюсь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 17:07 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
Toxamor wrote: > Куда копать? В сторону остальных параметров функции Open() ;). Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 17:15 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
а какой параметр функции open передает экселю что открываем текстовый файл с разделителем ,?:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 17:23 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
Toxamor wrote: > а какой параметр функции open передает экселю что открываем текстовый > файл с разделителем ,?:) 4-й. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 17:25 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
>> а какой параметр функции open передает экселю что открываем текстовый >> файл с разделителем ,?:) >4-й. sourcestorage? Какое значение тогда нужно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 17:32 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
То есть функция будет ob.Application.WorkBooks.Opentext(filename,...,...,",")? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 17:34 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
В смысле не opentext, a open ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 17:35 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
Data window в Excel? Так есть же функция Saveas.Приходилось её пользовать по жизни. Чтоб сохраняемый файл нормально открылся екселем,поставить тип файла Excel5! или text!,а так как имя файла вы сами задаёте,то не стесняйтесь,ставьте расширение .xls. Мне приходлось так забивать биржевый отчёт из dw в excel,давно было,но работало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 17:41 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
>Так есть же функция Saveas.Приходилось её пользовать по жизни. >Чтоб сохраняемый файл нормально открылся екселем,поставить тип файла Excel5! или text!,а так >как имя файла вы сами задаёте,то не стесняйтесь,ставьте расширение .xls. >Мне приходлось так забивать биржевый отчёт из dw в excel,давно было,но работало.[/quot] Использование данной функции не устраивает тем, что передаются все данные, но юез названий столбцов и итогов по группам, как и названия самих групп, то есть приходится все это потом приводить в соответствующий вид, а если сохранять в формате ascii, то все эти данные есть, остается только выгрузить их в Excel ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 17:52 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
Toxamor wrote: > sourcestorage? Какое значение тогда нужно? Посмотри в Help-е по VBA... Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 17:56 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
Пардон,названия столбцов эта saveas выдаёт,есть там 3-й параметр,его надо поставить на true. Более того,если вы вскроете сорс data window и поменяете значение параметра колонки data window ,который зовётся dbname,на что-то типа "Я ушёл в кино",то в екселе в заголовке появится "Я ушёл в кино". У экстернал datawindow это свойство доступно из пейнтера. Что касается вычислемых полей-ваша правда-не покажет,где бы они не были в строке или в трейлере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 18:56 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
Матка боска! Как же мучаются люди у которых нету 55€ на покупку dw2xls! Аж слезы на глаза наворачиваются от жалости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2007, 01:28 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
Ну я сильно не мучался, просто было самому интересно, да и начальник сказал: пусть программа выгружает данные в эксель, а то что я могу написать служебку чтобы мне купили библиотеку dw2xls за 55 евро, не сказал да и думаю не скажет:), политика не та. Да и идеальное совпадение не требуется... Спасибо всем кто откликнулся, пошел через экспорт в ascii, затем покопался в хелпе по VBA, конкретно по функции, нарыл то что нужно и теперь все замечательно работает:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2007, 00:21 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
ЗоринАндрейМатка боска! Как же мучаются люди у которых нету 55€ на покупку dw2xls! Аж слезы на глаза наворачиваются от жалости. +1/ хотя я ее купил еще за 22 бакса ;) сделали б чтоль для х-усср по 22 бакса, а для злых буржуев по 55 евро... Хотя... Стоящая весчь! Но 22 бакса не так жалко ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2007, 00:59 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
Мда, теперь начальство кинуло в другую сторону, необходимо все это переписать под опенофисовский 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? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2007, 15:32 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
похоже соответствует массиву структур ----------------------------------------------------------------------------- Главная деталь любой машины - голова ее владельца ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2007, 15:54 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
До этого я не додумался, а ведь правда похоже, а как задать тип данной структуры, в коде это вроде бы com.sun.star.beans.PropertyValue. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2007, 16:05 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
элементы - string или массив char ----------------------------------------------------------------------------- Главная деталь любой машины - голова ее владельца ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2007, 17:18 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
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, то все отображается нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2007, 17:51 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2007, 17:52 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
Лучше наверное не create, а ConnectToNewObject и обращаться используя object А что мешает сохранить в exel8! ----------------------------------------------------------------------------- Главная деталь любой машины - голова ее владельца ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2007, 18:37 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
spas2001Лучше наверное не create, а ConnectToNewObject и обращаться используя object А что мешает сохранить в exel8! ----------------------------------------------------------------------------- Главная деталь любой машины - голова ее владельца ну функция коннект используется выше по скрипту, когда мы подключаем сервисменеджер. Может где то и ошибаюсь, просто в качестве вдохновления я использую документацию по openoffice.org basic, а там сказано то, что необходимо сначала подключить класс сервис, через коннект, а потом create. И уже затем открывать существующий документ. А насчет 8й версии эксель, пишем мы на 8 билдере, там в помощи его просто нет:( край, это 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2007, 20:13 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
С кодировкой разобрался, сохраняю документ в формате 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. Все отлично работает, но есть одно но: по умолчанию ООо открывает документ используя в качестве разделителя запятую, что неуместно, так как есть запятые и в ячейках. Может кто нибудь поделиться советом, какой параметр FilterOptions крутить, чтобы явно задать этот разделитель, или кинет ссылочку на документы. http://community.i-rs.ru/ уже просмотрел, вроде бы там нет примеров с конкретным разделителем. Буду благодарен:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2007, 16:50 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
разобрался, нужна была еще одна срока массива, которая определяла filterflags ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2007, 19:23 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
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) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 16:54 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
Спасибо, поковыряю:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 14:00 |
|
||
|
Экспорт таблицы из txt файла в excel используя разделители
|
|||
|---|---|---|---|
|
#18+
не нашёл примера кода - но я делал это так.. Сначала выгружал в 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2008, 16:59 |
|
||
|
|

start [/forum/topic.php?all=1&fid=15&tid=1336816]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 9ms |
| total: | 153ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...