Экспорт в Excel с использованием Symphony

NetWood

Lotus Team
17.04.2008
565
96
BIT
174
Плиз подкинуть базку или примерчик LS импорт в Excel файл с использованием Symphony.
Стандартно с MS примеров масса и у самого есть и в песочнице, а на Symphony нет опыта никакого...
Надумали web-ом перезжать на Linux, да там там агентец один на MS надо переделывать.

Мне уже давал ENT ссылки на зеленом, да "лежит" он :( потерялось.
Буду весьма признателен.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
472
ежели задумали "переезжать", то агент с использованием КОМ не подойдет (работать CreateObject будет тока в виндозе)

про эхель (из вашего поста не понятно - что конкретно делать собираетесь)


ODF - формат основанный на сжатом XML + объекты графики и прочего
можете работать с пом. записи XML напрямую, если касается только текста...
Сергей здесь выкладывал код
есть ODFToolkit

там также есть работа на основе шаблонов
как пример реализации
ОО необязательно ставить тогда

ежели поставить ОО - то можно воспользоваться
 

NetWood

Lotus Team
17.04.2008
565
96
BIT
174
Благодарю за ссылки. java боюсь не осилю :)
Немного ввел в заблуждение сообщество. Речь идет о экспорте в Excel текстовой инфы с форматирование и пр.
ODS еще не все понимают.
В общем действительно необходимо найти замену для suse без COM или другим способом
пример следующего кода
filename = "C:\order_"+ Cstr(orderID) + ".xls"
Set xlApp = CreateObject("Excel.Application.11")
xlApp.Visible = False

Set xlWB = xlApp.Workbooks.Add 'создаем новую книгу
Set xlSheet = xlWB.Sheets(1) ' выбираем первую "страницу"
xlsheet.Activate
xlsheet.Name = "Order"

ARangeValue = xlsheet.Range("A1").Activate
...
''тут заполнение строк
Set itemdoc = order.GetFirstDocument
Do While Not itemdoc Is Nothing
i = i+1 '' счетчик строк excel
Call agentLog.LogAction( " qty = " + Cstr(itemdoc.Qty(0)))
With xlsheet
.Range("A" & Trim(Str(i + 1))).Value = Cstr(i-n+1) ' номер по порядку
.Range("B" & Trim(Str(i + 1))).Value = itemdoc.Title(0)
.Range("C" & Trim(Str(i + 1))).Value = itemdoc.CatalogNumber(0)
.Range("D" & Trim(Str(i + 1))).Value = itemdoc.Qty(0)
.Range("E" & Trim(Str(i + 1))).Value = itemdoc.Price(0)
.Range("F" & Trim(Str(i + 1))).Value = itemdoc.qty(0) * itemdoc.Price(0)
.Range("G" & Trim(Str(i + 1))).Value = itemdoc.Packing(0)
'' .Range("H" & Trim(Str(i + 1))).Value = itemdoc.PageName(0)
'' .Range("I" & Trim(Str(i + 1))).Value = itemdoc.UserName(0)
End With
Set itemdoc = order.GetNextDocument(itemdoc)
Loop
...
xlapp.activeworkbook.saveas filename
xlapp.activeworkbook.close
xlapp.quit
Set xlSheet = Nothing
Set xlWB = Nothing
Set xlapp = Nothing

Понятно, что на Linux такое работать не будет. отсюда и ищу замену. Однако выходной фай должен быть .xls
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
472
напрасно вы так про джава...
приведенная первая ссылка вас выведет к проекту (в конце там)

там и дока достаточно подробная есть и jar
jar кладем в jvm/lib/ext в домине
ежели тяжко на джаве - пишем бридж LS2J
джава класс в пустым конструктором (шб не морочиться с инициализацией типов в LS) и методами с передачей стрингов (параметров)
и рулим джава кодом из LS
примеры там есть (по ссылкам) - просто вставьте код в библиотеку и подключайте ёе в бридж (примеры в хэлпе)
у меня нет под рукой Нотусов - не могу код набросать и оттестить

вот из доки (куски понадергал):
Example (Unix):
WorkBookHandle mybook = new WorkBookHandle("/home/username/OpenXLS4/explore.xls");
WorkSheetHandle sheet = mybook.getWorkSheet("Sheet1");
CellHandle cell = sheet.getCell("B2");
String s = cell.getStringVal(); // gets String representation of Cell

Object s = cell.getVal(); // gets actual Cell value (Double, String, Integer, etc.

и там еще много чего
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
472
прям для вашего варианта...
есть для работы с рэнжем:
// this will throw a CellNotFoundException if the name is not found.
NameHandle nand = mybook.getNamedRange("nametest4");
CellHandle[] ch = nand.getCells(); // access the Cells in the range
for(int x = 0;x<ch.length;x++){
ch[x].setVal(123 * x);
ch[x].setFontColor(FormatHandle.PaleBlue);
}
System.out.println(nand.getName());

Use the CellRange (String range, WorkBookHandle bk) constructor to create a range of cells, then use the NameHandle(String name, CellRange range) method to generate a Named range consisting of the range of Cells specified.

Example:
// Create new NameHandle from a CellRange

CellRange range = new CellRange( "Sheet1!D8:D13", mybook);

NameHandle newname = new NameHandle("NewNamedRange",range);
 

NetWood

Lotus Team
17.04.2008
565
96
BIT
174
Сэнкс за тычок! Верно ли я понимаю, что это кросс платформенное решение?
Тщательно выкурив - получим export-import excel работающий что на win, что на linux?
нда осилить бы :)

re: никогда не лазил в \jvm. Там архивчик нашелся javadocs.zip После unzip мегов на 120 java help - кури нехочу
Век живи - век учись
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
472
да кроссплатформенное, но не рекомендую править файло созданное в МСО - не факт, но возможны глюки (обычно, МС продукты ни с чем нормально не совмещаются)
осиливать там практич. нечего - берите готовый код (прям из доков по проекту)
из хэлпа по разработке - пример LS2J
ещё раз:
-создаем класс, в библиотеке Java, с пустым конструктором
-создаем методы, кот. на вход даем стринги (для работы с XLS)
-создаем код инициализации LS2J (прям как в хэлпе дизайнера)
-дергаем методы джава из LS
 

vincent_vega

Green Team
02.04.2005
169
1
BIT
0
Можно еще попробовать родной XML формат Excel, его понимает Symphony
Работаете с обычным XML но в Excel будет все красиво отформатировано.
Попробуйте взять любой xls файл и в Excel сохранить его как "Таблица XML 2003" :

Код:
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!