Easy Excel
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
-
- Бывалый
- Сообщения: 95
- Зарегистрирован: 09 Декабрь 2005, 10:47
- Откуда: Tbilisi, Georgia
- Контактная информация:
Easy Excel
Добрый день
исползую Template EasyExcel 4.0 . генерирую екселовскую форму принимая ряд команд оформления текста (SetFont, FontSize, MErgeCell, drawtable ..) , количество строк приблизительно 500 строков . Проблема что генерация зантмает много времени (2-4 мин на i5) но когда я записал программу именно на сервер (IBM XEON 2 ЦПО 32 RAM OS-windows serverR2) совсем умер , нужен около 10 мин.
Что делать ? как ускорить процесс
с уважением
Tuko_Geo
исползую Template EasyExcel 4.0 . генерирую екселовскую форму принимая ряд команд оформления текста (SetFont, FontSize, MErgeCell, drawtable ..) , количество строк приблизительно 500 строков . Проблема что генерация зантмает много времени (2-4 мин на i5) но когда я записал программу именно на сервер (IBM XEON 2 ЦПО 32 RAM OS-windows serverR2) совсем умер , нужен около 10 мин.
Что делать ? как ускорить процесс
с уважением
Tuko_Geo
- Admin
- Администратор
- Сообщения: 3963
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 29 раз
- Поблагодарили: 22 раза
- Контактная информация:
Re: Easy Excel
А данные из очереди не построчно случаем выводите?
Код этих 500 строк можно в студию?
Код этих 500 строк можно в студию?
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
-
- Бывалый
- Сообщения: 95
- Зарегистрирован: 09 Декабрь 2005, 10:47
- Откуда: Tbilisi, Georgia
- Контактная информация:
Re: Easy Excel
Да посрочном, потому что мне нужно почти все форматировать посвоему. (к сожолению)
Код: Выделить всё
EXLClass.Init(true,false,true)
EXLClass.OpenWorkbook(Glo:ExcelFileName,false,,,false)
Loc:ExcelStarted = 1
Do Main
Main Routine
EXLClass.Visible(false)
If Loc:Main_Games = 1 Then Do Print_Main_Games.
Print_Main_Games Routine
Clear(Under)
EXLClass.SelectSheet(1); R=6
LIS:PNumber = Glo:ProgN; LIS:TNumber = 1;
HeadC = 0; HeadS = 0
Set(LIS:KeyPTNumber,LIS:KeyPTNumber)
Loop
Next(Listi)
If errorcode() or LIS:PNumber <> Glo:ProgN Then Break.
If LIS:Shedegi <> '...' Or LIS:Gad <> 0 Then Cycle.
if lis:date < Today() or (lis:date = Today() and lis:TIme < clock()) then cycle.
If Loc:FromCode1 <> 0 Then
If LIS:TNumber < Loc:FromCode1 Then Cycle.
If LIS:TNumber > Loc:ToCode1 Then Cycle.
End
case Lis:Status
of 'B' orof 'N' orof 'L'
Cycle
.
Case Lis:Status
Of '1' Orof '2' Orof '3' orof 'P'
If (HeadS <> LIS:SpecHeadCode) Or ((LIS:HeadCode<>0) And (LIS:HeadCode <> HeadC)) Or (LIS:LStat[1] = 1) Then
Do PrintHead
HeadC = LIS:HeadCode; HeadS = LIS:SpecHeadCode
.
Else
If HeadC <> LIS:HeadCode Then
Do PrintHead
HeadC = LIS:HeadCode
.
End
Do ReformatRow
End
If R > Sav:S_Row Then
EXLClass.SelectRange(Sav:S_Row,1,R,Sav:With); EXLClass.DrawTable(BoxMode:Table,LineStyle:Dash,BorderWeight:Hairline)
.
Loop j=1 To 5000
if Under[j]=1 Then
EXLClass.SelectRange(j,1,j,3)
EXLClass.SetBorder(Border:EdgeBottom,LineStyle:Continuous,BorderWeight:Medium)
. .
PrintHead Routine
Case LIS:Status
Of 'M' orof 'P'
Do HPrintM
Of 'H' Orof 'B'
Do HPrintH
Of 'T'
Do HPrintT
Of 'N'
Do Hprinttennis
Of '1' Orof '2' Orof '3'
Do HPrint1
End
ReformatRow Routine
Case LIS:Status
Of 'M' orof 'P'
Do ReformatM
Of 'T' Orof 'H' OrOf 'B'
Do ReformatT
Of 'N'
Do ReformatTennis
Of '1' Orof '2' orof '3'
Do Reformat6
End
HPrintM Routine
Do GetDivName; Do PrintMainHeader
NN=Lis:Status
Do HCodi_Teams
EXLClass.WriteRow(R,6,'1,X,2,1X,X2,12'); EXLClass.SetFont('Arial',8,,Font:Bold)
EXLClass.WriteRow(R,12,'meti,tot.,nakl'); EXLClass.SetFont('LitNusx',8,,Font:Bold);
EXLClass.WriteRow(R,15,'(0)1,(0)2'); EXLClass.SetFont('Arial',8,,Font:Bold)
EXLClass.WriteRow(R,17,'ki,ara'); EXLClass.SetFont('LitNusx',8,,Font:Bold);
Sav:B_D = R-1
PrintMainHEader Routine !
EXLClass.SelectRange(R,1,R,18); EXLClass.SetFont(Glo:Header_Font,Glo:Header_Font_Syze,);
EXLClass.SelectRange(R,1,R,5); EXLClass.Mergecells; EXLClass.SetFont(Glo:Div_Font,Glo:Div_Font_Syze, COLOR:Black, Glo:Div_Font_Style);
Do Format_STR
EXLClass.Write(R,1,Clip(Loc:HeadM))
if str_Yes then do set_font_div.
EXLClass.SelectRange(R,6,R,8); EXLClass.Mergecells; EXLClass.Write(R,6,'ZiriTadi')
EXLClass.SelectRange(R,9,R,11); EXLClass.Mergecells; EXLClass.Write(R,9,'saSualo')
EXLClass.SelectRange(R,12,R,14); EXLClass.Mergecells; EXLClass.Write(R,12,'burTebi')
EXLClass.SelectRange(R,15,R,16); EXLClass.Mergecells; EXLClass.Write(R,15,'freze gayra')
EXLClass.SelectRange(R,17,R,18); EXLClass.Mergecells; EXLClass.Write(R,17,'2-gaitans')
EXLClass.SelectRange(R,6,R,18); EXLClass.SetFont(Glo:Header_Font,Glo:Header_Font_Syze,,Font:Bold)
!********* Reformat MAin **************************************************************!
ReformatM Routine !
Do ClaFormatM; Do RCodi_Teams !
EXLClass.Write(R,6, Left(Clip(L:W)),True); EXLClass.Write(R,7, Left(Clip(L:X)),True); EXLClass.Write(R,8, Left(Clip(L:L)),True)
EXLClass.Write(R,9, Left(Clip(L:X_1)),True); EXLClass.Write(R,10,Left(Clip(L:X_2)),True); EXLClass.Write(R,11,Left(Clip(L:X_12)),True)
EXLClass.Write(R,12,Left(Clip(L:G25)),True); EXLClass.Write(R,13,Left(Clip(L:GL25)),True); EXLClass.Write(R,14,Left(Clip(L:L25)),True)
EXLClass.Write(R,15,Left(Clip(L:F1)),True); EXLClass.Write(R,16,Left(Clip(L:F2)),True)
EXLClass.Write(R,17,Left(Clip(L:Gol1)),True); EXLClass.Write(R,18,Left(Clip(L:Gol2)),True)
If Lis:Date = Today() Then
EXLClass.SelectRange(R,6,R,18); EXLClass.SetFont(,,,Font:Bold)
.
Sav:With = 18 !
ClaFormatM Routine !
L:Code = Format(Lis:TNumber,@N_5) !
L:Date = Format(Lis:Date,@D05) !
L:Time = Format(Lis:Time,@t01) !
L:DT = L:Date & L:Time !
L:T1 = Format(Lis:Team1,@S30) !
If Lis:Status='H' Then Lis:Team2 = Clip(Lis:Team2)&Clip(Lis:Fora). !
L:T2 = Format(Lis:Team2,@S30) !
L:TT = Clip(L:T1) & ' - ' & Clip(L:T2) !
L:W = Format(LIS:W,@N6.2) ; If LIS:W <= 1 then L:W = ' - '. !
L:X = Format(LIS:X,@N6.2) ; If LIS:X <= 1 then L:X = ' - '. !
L:L = Format(LIS:L,@N6.2) ; If LIS:L <= 1 then L:L = ' - '. !
L:X_1 = Format(LIS:X_1,@N6.2); If LIS:X_1 <= 1 then L:X_1 = ' - '. !
L:X_2 = Format(LIS:X_2,@N6.2); If LIS:X_2 <= 1 then L:X_2 = ' - '. !
L:X_12 = Format(LIS:X_12,@N6.2); If LIS:X_12 <= 1 then L:X_12 = ' - '. !
L:G25 = Format(LIS:G25,@N6.2); If LIS:G25 <= 1 then L:G25 = ' - '. !
L:L25 = Format(LIS:L25,@N6.2); If LIS:L25 <= 1 then L:L25 = ' - '. !
L:GL25 = Format(LIS:GL25,@N6.1); If LIS:GL25 = 1 then L:GL25 = ' - '. !
L:F1 = Format(LIS:Fre1,@N6.2); If LIS:Fre1 <= 1 then L:F1 = ' - '. !
L:F2 = Format(LIS:Fre2,@N6.2); If LIS:Fre2 <= 1 then L:F2 = ' - '. !
L:Gol1 = Format(LIS:Gol1,@N6.2); If LIS:Gol1 <= 1 then L:Gol1 = ' - '. !
L:Gol2 = Format(LIS:Gol2,@N6.2); If LIS:Gol2 <= 1 then L:Gol2 = ' - '. !
!*** GetDivNAme ***********
GetDivName Routine !
if lis:Status='P' Then
Spe:Code = LIS:SpecHeadCode
Get(Spec,Spe:Key_Code)
If Errorcode() Then Loc:HeadM = 'Secdoma! ar weria speSalis kodi'; Er#=1
Else Loc:HeadM = Spe:Name; ER#=0.
Else
CHA:Code = LIS:HeadCode
Get(Champ,CHA:Key_Code)
Loc:HeadM = CHA:Name
.
R = R+1
If INDX#=0 Then
INDX#=1
Sav:S_Row = R
Else
Sav:E_Row = R-1
If Sav:E_Row > Sav:S_Row Then
EXLClass.SelectRange(Sav:S_Row,1,Sav:E_Row,Sav:With)
EXLClass.DrawTable(BoxMode:Table,LineStyle:Dash,BorderWeight:Hairline)
.
Sav:S_Row = R
End
EXLClass.SelectRange(Sav:B_D,1,Sav:B_D,Sav:With);
EXLClass.SetBorder(Border:EdgeBottom,LineStyle:Continuous,BorderWeight:Thin)
EXLClass.SelectRange(Sav:B_D+1,1,Sav:B_D+1,Sav:With);
EXLClass.SetBorder(Border:EdgeBottom,LineStyle:Double,BorderWeight:Thick)
If Loc:NBA_NHL = 1 Then
EXLClass.SelectRange(Sav:B_D); EXLClass.RowHeight(30)
Else
EXLClass.SelectRange(Sav:B_D); EXLClass.RowHeight(19)
.
- Admin
- Администратор
- Сообщения: 3963
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 29 раз
- Поблагодарили: 22 раза
- Контактная информация:
Re: Easy Excel
В таком случае если и можно оптимизировать то совсем чуть чуть.Tuko_G писал(а):Да посрочном, потому что мне нужно почти все форматировать посвоему. (к сожолению)
Макрос родной не быстрее это сделает.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Re: Easy Excel
Т.к. много надо было отчетов в Excel выводить, и, посмотрев, как долго это все работает,
написал класс CW6 для вывода отчетов прямо в бинарном виде - *.xls
т.е. на этой машине даже excel не нужен для генерации
Конечно, это на любителя, НО работает моментально.
Вот пример отчета (во вложении)
написал класс CW6 для вывода отчетов прямо в бинарном виде - *.xls
т.е. на этой машине даже excel не нужен для генерации
Конечно, это на любителя, НО работает моментально.
Вот пример отчета (во вложении)
-
- ✯ Ветеран ✯
- Сообщения: 5037
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 23 раза
Re: Easy Excel
Т.е. ты знаешь формат xls файла? Может поделишься с народом. Нам тоже не помешало бы сразу формировать xls файл, без OLE и других приблуд.
We are hard at work… for you.
-
- Старожил
- Сообщения: 264
- Зарегистрирован: 11 Февраль 2009, 8:41
- Откуда: г. Анапа
- Поблагодарили: 3 раза
Re: Easy Excel
Присоединяюсь к предыдущему постУ. А то сегодня глянул в эту доку - 40 Мб по-ненашему. Не осилю ...
Re: Easy Excel
Привет всем! Clarion 8.0.9759 Windows 7 SP1 Русский
Есть решение Direct Excel от Олега Руденко dynalib.narod.ru Исходники dExcel v1.6.30 (~150Kb)
Вот только откомпилированный пример проекта xlstest.cwproj создаёт файл Test.xls, при открытии которого Excel 2010 пишет "Файл повреждён, поэтому его нельзя открыть".
Кто работал с данным решением, подскажите пожалуйста, что необходимо сделать для получения в тестовом проекте xlstest.cwproj (xlstest.clw) файла правильного формата .XLS который корректно откроет Excel 2010.
С Уважением, Developer, cfwdeveloper@gmail.com
Есть решение Direct Excel от Олега Руденко dynalib.narod.ru Исходники dExcel v1.6.30 (~150Kb)
Вот только откомпилированный пример проекта xlstest.cwproj создаёт файл Test.xls, при открытии которого Excel 2010 пишет "Файл повреждён, поэтому его нельзя открыть".
Кто работал с данным решением, подскажите пожалуйста, что необходимо сделать для получения в тестовом проекте xlstest.cwproj (xlstest.clw) файла правильного формата .XLS который корректно откроет Excel 2010.
С Уважением, Developer, cfwdeveloper@gmail.com
С Уважением, Developer
-
- ✯ Ветеран ✯
- Сообщения: 1708
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 9 раз
- Поблагодарили: 4 раза
Re: Easy Excel
может поможет
http://sources.codenet.ru/download/343/xls_rus.html
http://sources.codenet.ru/download/343/xls_rus.html
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Re: Easy Excel
Прошу прошения за долгий ответ - я здесь не часто
Могу сделать DLL с экспортируемыми функциями
Но я бы посоветовал вам создавать Excel файлы в XML формате
Они прекрасно открываются им
вот пример, как наша АБС выводит список в Excel
Файл "Список счетов раздела А.xml":
Могу сделать DLL с экспортируемыми функциями
Но я бы посоветовал вам создавать Excel файлы в XML формате
Они прекрасно открываются им
вот пример, как наша АБС выводит список в Excel
Файл "Список счетов раздела А.xml":
Код: Выделить всё
<?xml version="1.0" encoding="windows-1251" standalone="yes"?>
<?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">
<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office" />
<Styles>
<Style ss:ID="Default">
<Alignment ss:Horizontal="Center" />
<Font ss:Bold="1" />
<NumberFormat ss:Format="@" />
</Style>
<Style ss:ID="sID0">
<Alignment ss:Horizontal="Right" />
<Font ss:Bold="0" />
<NumberFormat ss:Format="#0" />
</Style>
<Style ss:ID="sID1">
<Alignment ss:Horizontal="Left" />
<Font ss:Bold="0" />
<NumberFormat ss:Format="@" />
</Style>
<Style ss:ID="sID2">
<Alignment ss:Horizontal="Left" />
<Font ss:Bold="0" />
<NumberFormat ss:Format="@" />
</Style>
<Style ss:ID="sID3">
<Alignment ss:Horizontal="Center" />
<Font ss:Bold="0" />
<NumberFormat ss:Format="DD.MM.YYYY" />
</Style>
<Style ss:ID="sID4">
<Alignment ss:Horizontal="Left" />
<Font ss:Bold="0" />
<NumberFormat ss:Format="@" />
</Style>
<Style ss:ID="sID5">
<Alignment ss:Horizontal="Left" />
<Font ss:Bold="0" />
<NumberFormat ss:Format="@" />
</Style>
<Style ss:ID="sID6">
<Alignment ss:Horizontal="Center" />
<Font ss:Bold="0" />
<NumberFormat ss:Format="DD.MM.YYYY" />
</Style>
<Style ss:ID="sID7">
<Alignment ss:Horizontal="Left" />
<Font ss:Bold="0" />
<NumberFormat ss:Format="@" />
</Style>
<Style ss:ID="sID8">
<Alignment ss:Horizontal="Right" />
<Font ss:Bold="0" />
<NumberFormat ss:Format="#0" />
</Style>
</Styles>
<Worksheet ss:Name="Список счетов раздела А">
<Table ss:ExpandedColumnCount="9" ss:ExpandedRowCount="2" x:FullColumns="1" x:FullRows="1">
<Column ss:StyleID="sID0" ss:AutoFitWidth="1" />
<Column ss:StyleID="sID1" ss:AutoFitWidth="1" ss:Width="140" />
<Column ss:StyleID="sID2" ss:AutoFitWidth="1" ss:Width="140" />
<Column ss:StyleID="sID3" ss:AutoFitWidth="1" />
<Column ss:StyleID="sID4" ss:AutoFitWidth="1" ss:Width="126" />
<Column ss:StyleID="sID5" ss:AutoFitWidth="1" ss:Width="189" />
<Column ss:StyleID="sID6" ss:AutoFitWidth="1" />
<Column ss:StyleID="sID7" ss:AutoFitWidth="1" ss:Width="133" />
<Column ss:StyleID="sID8" ss:AutoFitWidth="1" />
<Row ss:StyleID="Default">
<Cell>
<Data ss:Type="String">Идентификатор счета</Data>
</Cell>
<Cell>
<Data ss:Type="String">Номер счета</Data>
</Cell>
<Cell>
<Data ss:Type="String">Наименование клиента</Data>
</Cell>
<Cell>
<Data ss:Type="String">Дата открытия</Data>
</Cell>
<Cell>
<Data ss:Type="String">Наименование счета</Data>
</Cell>
<Cell>
<Data ss:Type="String">Полное наименование клиента</Data>
</Cell>
<Cell>
<Data ss:Type="String">Дата закрытия</Data>
</Cell>
<Cell>
<Data ss:Type="String">Комментарий к счету</Data>
</Cell>
<Cell>
<Data ss:Type="String">Номер отделения</Data>
</Cell>
</Row>
<Row>
<Cell>
<Data ss:Type="Number">8472</Data>
</Cell>
<Cell>
<Data ss:Type="String">4070281000000000007</Data>
</Cell>
<Cell>
<Data ss:Type="String">ЛТД</Data>
</Cell>
<Cell>
<Data ss:Type="DateTime">1999-05-12T00:00:00.000</Data>
</Cell>
<Cell>
<Data ss:Type="String"> ООО "ЛТД "</Data>
</Cell>
<Cell>
<Data ss:Type="String">ООО "ЛТД"</Data>
</Cell>
<Cell>
<Data ss:Type="String"> </Data>
</Cell>
<Cell>
<Data ss:Type="String">нет свед.</Data>
</Cell>
<Cell>
<Data ss:Type="Number">2</Data>
</Cell>
</Row>
</Table>
</Worksheet>
</Workbook>
-
- ✯ Ветеран ✯
- Сообщения: 5037
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 23 раза
Re: Easy Excel
Ссылка gopstop2007 - хоть что-то, правда, чтобы в этом разобраться - жизни не хватит. А с xml не всё гладко. У меня Excel 2007 сразу не открывает, говорит не тот формат, потом через какую-то конвертацию открывает. Потом, не понятно как быть с картинками, графиками, сложным форматированием ячеек. Пользователю нужно что? Нажал кнопку - через 15 секунд открылся в Excel красивый лист с форматированием, графиками и т.д. Через OLE всё путём, но уж очень долго на больших объёмах информации.
We are hard at work… for you.
Re: Easy Excel
Странно, у меня Excel 2003 и открывает без вопросов
Правда, ставил патч для работы с docx
Но в excel 2007 он уже должен быть.
А картинки и графики в моей реализации тоже нет - не нужно мне тогда это было (~2003 год)
Правда, ставил патч для работы с docx
Но в excel 2007 он уже должен быть.
А картинки и графики в моей реализации тоже нет - не нужно мне тогда это было (~2003 год)
-
- ✯ Ветеран ✯
- Сообщения: 5037
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 23 раза
Re: Easy Excel
Получается вот что.
Если открывать через проводник или Total Commander, то Excel открывается с пустым листом.
Если из Excel открывать, то: Нажимем на OK и: В общем, не есть хорошо. но я заметил, что есть какая-то разница из-за заголовка xml файла. Некоторые открываются без проблем.
Если открывать через проводник или Total Commander, то Excel открывается с пустым листом.
Если из Excel открывать, то: Нажимем на OK и: В общем, не есть хорошо. но я заметил, что есть какая-то разница из-за заголовка xml файла. Некоторые открываются без проблем.
We are hard at work… for you.
Re: Easy Excel
Когда-то был такой ActiveX Formula One , строил вполне удовлетворительные электронные таблицы.
Со скоростью в разы выше Ёкселя.
Вчера погуглил - жив, курилка...
Со скоростью в разы выше Ёкселя.
Вчера погуглил - жив, курилка...