Текущее время: Пн, июл 28 2025, 17:47

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: zwww для OpenOffice в Linux
СообщениеДобавлено: Сб, мар 01 2008, 09:06 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Чт, ноя 02 2006, 11:27
Сообщения: 51
Откуда: Ярославль
Пол: Мужской
Сделал zwww для OpenOffice в Linux
Смотреть здесь
https://zlobiny.ru/20080301_sap_zwww/sap_zwww.html

ну или...

Уважаемые специалисты! Не взыщите за непритязательный код, так как делалось все между делом, и язык StarBasic для OpenOffice я вижу впервые в жизни... Основой для кода ABAP послужили исходники от Parazit'а отсюда sapforum.ru. Основная идея :

1. Присвоить имя для области в шаблоне OpenOfficeCalc

2. Выгружаем файлы из R3 (шаблон, данные, макрос)

3. Запускаем OpenOffice из R3 типа "ooffice /file"

4. При помощи макроса StarBasic заполняем области данными

Доработки приветствуются.

Скачать инструкцию ZWWW для OpenOffice / Linux... http://www.zlobiny.ru/20080301_sap_zwww ... -02-28.doc

Скачать шаблон шаблон.ods http://www.zlobiny.ru/20080301_sap_zwww ... 010101.ods

Скачать данные данные.csv http://www.zlobiny.ru/20080301_sap_zwww ... 010101.csv


Последний раз редактировалось MM'щик Сб, мар 05 2022, 09:31, всего редактировалось 4 раз(а).

Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: zwww для OpenOffice в Linux
СообщениеДобавлено: Пн, мар 03 2008, 18:32 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, авг 31 2004, 14:57
Сообщения: 5258
Откуда: Ростов невеликий
Пол: Мужской
MM'щик написал:
Сделал zwww для OpenOffice в Linux
Смотреть здесь
http://ynpz.ru/sap_zwww/sap_zwww.html


афигеть - дайте два! :)) - пасиб - порадовал
эх...не все красноглазые продались ))


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, мар 04 2008, 18:12 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Понемногу пытаюсь разобраться с макросами Open Office. Под виндозой создать OLE-объект "CALC.Application" не прокатывает. У меня получилось только "SOFFICE.STARCALCDOCUMENT"...
И вообще, как то плохо с нормальной докой, не могу найти даже, как через OLE документ открыть. Может есть какая-нибудь дока?

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, мар 05 2008, 07:53 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 07:27
Сообщения: 321
Откуда: Где-то на севере
Пол: Мужской
Те же грабли :) с OLE и OpenOffice, но вплотную пока не брался.

_________________
I have a dream


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, мар 05 2008, 11:58 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Пн, сен 06 2004, 11:43
Сообщения: 1551
Пол: Мужской
Parazit написал:
Понемногу пытаюсь разобраться с макросами Open Office. Под виндозой создать OLE-объект "CALC.Application" не прокатывает. У меня получилось только "SOFFICE.STARCALCDOCUMENT"...
И вообще, как то плохо с нормальной докой, не могу найти даже, как через OLE документ открыть. Может есть какая-нибудь дока?
А стоит ли с OLE возиться ? Может со стороны жабы копнуть ? Что-нить типа RMI, JNI и т.д. ? Впринципе катаем на Java свой интерфейс-компонент, пропускаем его через wrapper и регистрируем в системе....... А JVM - благо с OO идет.............

Подробности от SUN начинаем копать тут..............

_________________
Ex ipso fonte bibere
Цитата:
Abyssus abyssum invocat
Dies diem docet
Ducunt volentem fata, nolentem trahunt

Estote prudentes sicut serpentes


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: zwww для OpenOffice в Linux
СообщениеДобавлено: Чт, янв 29 2009, 17:02 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Чт, окт 26 2006, 15:07
Сообщения: 227
MM'щик, я попробовал запустить вашу функцию в Линуксе,

Code:
  Set property of App 'DisplayAlerts' = 0.

выдало ненулевой sy-subrc, вы проверяли в линуксе?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: zwww для OpenOffice в Linux
СообщениеДобавлено: Пн, мар 29 2010, 15:58 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Чт, ноя 02 2006, 11:27
Сообщения: 51
Откуда: Ярославль
Пол: Мужской
Там вообще много чего лишнего, но в целом работает.
Я просто взял код для Excel и поправил под OpenOffice.
Уже писал - "Не взыщите за непритязательный код, так как делалось все между делом, и....т.д."


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: ВЕРСИЯ МАКРОСА для OpenOffice под Windows от 2010-12-23
СообщениеДобавлено: Чт, янв 20 2011, 16:29 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Чт, ноя 02 2006, 11:27
Сообщения: 51
Откуда: Ярославль
Пол: Мужской
ВЕРСИЯ МАКРОСА для OpenOffice под Windows от 2010-12-23

Code:
REM  *****  BASIC  *****

rem ZU 2010-12-23
rem shablon OpenOffice :  "MACROS_FOR_OO_20101231_100000.ODS"
rem file with data     :  "MACROS_FOR_OO_DAT_20101231_100000.csv"
rem version of OpenOffice : 3.2.1

  Type gy_tab
    sOblast As String
    iNum    as integer
    sVar    as string
    sText   as string
  End Type

  Type gy_tab2
    sOblast       as String
    ikol_strok    as integer
  End Type
rem -----------------------------------------------------------
rem                      Main
rem -----------------------------------------------------------
Sub Main
dim DataArr2(0,0) as gy_tab
dim DataArr3(0)   as gy_tab2
dim DataArrDel(0) as string
dim sOblast_old   as string
dim i             as integer
dim j             as integer
dim i2            as integer
dim j2            as integer
dim i3            as integer
dim j3            as integer
dim i6            as integer
dim ikol_strok    as integer
dim errcode       as string

rem получим все данные
errcode = ""
readFile(DataArr2,j2,i2,errcode)

if errcode = "" Then
rem получение табл "Область-КолСтрок"
rem это для случая когда Таблиц из SAP несколько
j3 = 0
sOblast_old = ""
for j = 0 to j2
  if DataArr2(j,0).sOblast = sOblast_old Then
    DataArr3(j3-1).sOblast     = DataArr2(j,0).sOblast
    DataArr3(j3-1).ikol_strok  = DataArr3(j3-1).ikol_strok + 1
  else
    redim preserve DataArr3(0 to j3) as gy_tab2
    DataArr3(j3).sOblast     = DataArr2(j,0).sOblast
    j3 = j3 + 1
  end if
  sOblast_old = DataArr2(j,0).sOblast
next

rem создание областей
rem копирование данных
i6 = 0
sOblast_old = ""
for j = 0 to j3-1
  for i = 0 to DataArr3(j).ikol_strok
   if DataArr3(j).ikol_strok <> 0 Then
    insert_and_copy_row (DataArr3(j).sOblast,i)
    sdvig = 1
    replace_text(DataArr3(j).sOblast,DataArr2,j2,i2,i,sdvig)
    if DataArr3(j).sOblast <> sOblast_old then
     redim preserve DataArrDel(0 to i6) as string
     DataArrDel(i6) = DataArr3(j).sOblast
     i6 = i6 + 1
     sOblast_old = DataArr3(j).sOblast
    endif
   end if
   if DataArr3(j).ikol_strok = 0 Then
    sdvig = 0
    replace_text(DataArr3(j).sOblast,DataArr2,j2,i2,i,sdvig)
   end if
  next
next

rem удаление строк-шаблонов
for i = 0 to i6-1
  delete_row(DataArrDel(i))
next

rem сохранение данных
rem...
end if    rem   if errcode = ""
end sub

rem -----------------------------------------------------------
rem                      Delete_Row
rem -----------------------------------------------------------
sub Delete_Row(sOblast as string)
Dim oRangeAddress    as object
dim oSheet           as object
dim errcode          as string
dim errstr           as string
On Error Goto ErrorHandler4
oSheet         = ThisComponent.CurrentController.ActiveSheet
oRangeAddress  = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(sOblast).getRangeAddress()
oSheet.RemoveRange(oRangeAddress, com.sun.star.sheet.CellDeleteMode.UP)
Exit Sub
ErrorHandler4:
  Reset
  errcode = "OBLAST" 
  errstr  = "Область не существует" & " " & sOblast
  MsgBox errstr,0,"Error"
  Exit Sub
end sub


rem -----------------------------------------------------------
rem                      Replace_text
rem -----------------------------------------------------------
sub replace_text(sOblast as string, DataArr2() as gy_tab,j2 as integer,i2 as integer,_
                 nomer as integer, sdvig as integer)
Dim oRangeAddress    as object
Dim oRangeAddress2   as object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
Dim oCellAddress
dim posx             as integer
dim posy             as integer
dim j5               as integer
dim i5               as integer
dim j4               as integer
dim i4               as integer
dim oCell            as object
dim errcode          as string
dim errstr           as string
On Error Goto ErrorHandler3
rem найдем стартовую позицию
oRangeAddress  = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(sOblast).getRangeAddress()
oRangeAddress2 = oRangeAddress
posx = oRangeAddress2.StartColumn
posy = oRangeAddress2.StartRow    + sdvig + nomer
rem oCellAddress = ThisComponent.CurrentController.ActiveSheet.getCellByPosition(posx, posy).getCellAddress()
rem oCell = ThisComponent.CurrentController.ActiveSheet.getCellByPosition(posx, posy)
rem надо найти область с номером Nomer
for j5 = 0 to j2
   if DataArr2(j5,0).sOblast = sOblast then
     j4 = j5 + nomer
     exit for
   end if
next
rem замена текста
for i5 = 0 to i2
  if  DataArr2(j4,i5).sOblast = sOblast Then
   posx2  = posx + i5
   posy2  = posy
   oCell  = ThisComponent.CurrentController.ActiveSheet.getCellByPosition(posx2, posy2)
   oCell_string = oCell.string 
   for i7 = 0 to i2
    sOblast2 = DataArr2(j4,i7).sOblast
    inum2    = DataArr2(j4,i7).inum
    sVar2    = DataArr2(j4,i7).sVar
    sText2   = DataArr2(j4,i7).sText
    if DataArr2(j4,i7).sOblast <> "" then
     if oCell.string = DataArr2(j4,i7).sVar Then
      oCell.string = DataArr2(j4,i7).sText
     end if
    end if
   next
  end if
next
Exit Sub
ErrorHandler3:
  Reset
  errcode = "OBLAST" 
  errstr  = "Область не существует" & " " & sOblast
  MsgBox errstr,0,"Error"
  Exit Sub
end sub

rem -----------------------------------------------------------
rem              ReadFile
rem -----------------------------------------------------------
Sub ReadFile (DataArr2() as gy_tab, glob_j as integer,glob_i as integer,errcode as string)
Dim iCount     as Integer
Dim sLine      as String
dim ilog       as Integer
dim oblast     as string
dim oblast_old as string
dim ivar       as String
dim inum       as integer
dim inum_old   as integer
dim itext      as String
Dim oSheet     as object
dim oTitle2    as string
dim lfilename  as string
rem dim errcode    as string
dim errstr     as string
dim l_pos      as integer
dim i          as integer
dim j          as integer
On Error Goto ErrorHandler2
oSheet     = ThisComponent.CurrentController.ActiveSheet
rem document   = ThisComponent.CurrentController.Frame
oTitle     = ThisComponent.Location
otime      = right(oTitle,19)
otime      = left(otime,15)
olenTitle  = len(oTitle)
oTitle2    = left(oTitle,olenTitle-19)
olenTitle2 = len(oTitle2)
oTitle2    = right(oTitle2,olenTitle2-8)
rem lfilename  = oPath + "ZWWW_DATA_" + otime + ".csv"
lfilename  = oTitle2 + "DAT_" + otime + ".csv"
l_pos = InStr(lfilename, "%")
Do While l_pos <> 0
  lfilename = ReplaceInString(lfilename, l_pos, 3, " ")
  l_pos = InStr(lfilename, "%")    
Loop
rem lfilename = "file:///C:/WINDOWS/Temp/ZSZ_OO_3Y_TOPLIVO_20101214_112155.ODS"
rem lfilename = "///tmp/ZlobinYV/ZWWW_DATA_20080225_131246.csv"
iCount = Freefile
rem errcode = "FILE"
On Error Goto ErrorHandler
open lfilename for Input as iCount
ilog = 1
i = 0
j = 0
glog_i = 0
glob_j = 0
While not eof(#iCount)
  Line Input #iCount, sLine
  select case ilog
  case 1
    oblast = sLine
    ilog = 2
  case 2
    inum = sLine
    ilog = 3 
  case 3
    ivar = sLine
    ilog = 4
  case 4
    itext = sLine
    if  oblast =  oblast_old _
    and inum   =  inum_old Then
    i = i + 1
    end if
    if  oblast <> oblast_old _
    or  inum   <> inum_old Then
     if oblast_old <> "" Then
      j = j + 1
      i = 0
     end if
    end if
    if  j >  glob_j _
    and i <= glob_i then
     redim preserve DataArr2(0 to j,0 to glob_i) as gy_tab   
     glob_j = j
    end if
    if  i >  glob_i _
    and j <= glob_j then
     redim preserve DataArr2(0 to glob_j,0 to i) as gy_tab   
     glob_i = i
    end if
    if i > glob_i and j > gob_j then
     redim preserve DataArr2(0 to j,0 to i) as gy_tab   
     glob_j = j
     glob_i = i
    end if   
    rem заполнить внут. табл.
    DataArr2(j,i).sOblast = oblast
    DataArr2(j,i).iNum    = inum
    DataArr2(j,i).sVar    = ivar
    DataArr2(j,i).sText   = itext   
    oblast_old = oblast
    inum_old   = inum
    ilog   = 1     
    oblast = ""
    inum   = ""
    ivar   = ""
    itext  = "" 

  case else
  end select
wend
Close #iCount
Exit Sub
ErrorHandler:
   Reset
   errcode = "FILE"   
   errstr  = "Файл не существ." & " " & lfilename
   MsgBox errstr,0,"Error"
   Exit Sub
ErrorHandler2:
   Reset
   errcode = "WINDOW" 
   errstr  = "Окно не активно"
   MsgBox errstr,0,"Error"
   Exit Sub
end sub


rem -----------------------------------------------------------
rem            insert_and_copy_row
rem -----------------------------------------------------------
Sub insert_and_copy_row (sOblast as string,nomer as integer)
Dim oRangeAddress    as object
Dim oRangeAddress2   as object
dim oSheet           as object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
Dim oCellAddress 'Адрес назначения
dim posx             as integer
dim posy             as integer
dim errcode          as string
dim errstr           as string
On Error Goto ErrorHandler5
rem Oblast         = "STROKA"
oSheet         = ThisComponent.CurrentController.ActiveSheet
oRangeAddress  = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(sOblast).getRangeAddress()
oRangeAddress2 = oRangeAddress
with oRangeAddress2
.StartRow = .StartRow + nomer + 1
.EndRow   = .EndRow   + nomer + 1
end with
oSheet.insertCells(oRangeAddress2, com.sun.star.sheet.CellInsertMode.ROWS)
posx = oRangeAddress2.StartColumn
posy = oRangeAddress2.StartRow
oCellAddress = ThisComponent.CurrentController.ActiveSheet.getCellByPosition(posx, posy).getCellAddress()
ThisComponent.CurrentController.ActiveSheet.copyRange(oCellAddress, oRangeAddress)
Exit Sub
ErrorHandler5:
   Reset
   errcode = "OBLAST"   
   errstr  = "Область не существ." & " " & sOblast
   MsgBox errstr,0,"Error"
   Exit Sub
end sub


rem ----------------------------------------------------
rem                   ReplaceInString
rem ----------------------------------------------------
Function ReplaceInString(s$, i&, n&, sNew$) As String
If i <= 1 Then
'Поместить строку впереди.
'Единственный вопрос - сколько должно быть удалено из строки.
If n < 1 Then 'Не удаляем ничего
  ReplacelnString = sNew & s
ElseIf n >= Len(s) Then 'Удаляем все
  ReplacelnString = sNew
Else 'Удаляем часть слева
  ReplaceInString = sNew & Right(s, Len(s) - n)
End If
ElseIf i + n > Len(s) Then
'Заменяем в конце, затем извлекаем крайнюю левую часть при помощи
'Mid. Если длина аргумента больше чем строка, то все прекрасно!
'Добавляем новый текст в конец.
ReplaceInString = Mid(s, 1, i - 1) & sNew
Else
'Заменяем где-нибудь в середине строки.
'Сначала, получим крайний левый текст.
'Потом, вставим новый текст, если он присутствует.
'Наконец, добавим самый правый текст.
ReplaceInString = Mid(s, 1, i - 1) & sNew & Right(s, Len(s) - i - n + 1)
End If
End Function





Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB