Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Corba";
Текущий архив: 2009.08.02;
Скачать: [xml.tar.bz2];

Вниз

OWC.SpreadSheet   Найти похожие ветки 

 
Думкин ©   (2006-09-26 08:01) [0]

C:\Program Files\Microsoft Office\Office\MSOWC.DLL

Меня интересует работа с указанным объектом.

Имеем код из Аксапты(Х++) рабочий:

static void Job15(Args _args)
{
 COM exappl;
 COM exsheet;
 COM range;
 int i;
 ;

 exappl =  new COM("OWC.SpreadSheet");
 exsheet = exappl.ActiveSheet();
 range = exsheet.range("A1");
 range.numberformat("@");
 range.value("00150");
 exsheet.export("c:\\1.xls",true);
}


Суть  данного кода - создать лист Эксель, ввести в ячейку значение "00150" как строку и выгрузить в Эксель и открыть его. При этом все работает, кроме того, что в я чейкес текстовым форматом оказывается не "00150", а "150".

Чтобы разобраться, начал марковать в Дельфи, на основе вышеуказанного кода:

procedure TForm1.Button2Click(Sender: TObject);
var exappl,exsheet, range : OleVariant;
begin

 exappl :=  CreateOleObject("OWC.SpreadSheet");
 exsheet := exappl.ActiveSheet;       //Тут вылетает
 range := exsheet.range("A1:AA10000");
 range := exsheet.range("A1");
 range.numberformat := "@";
 range.value("00150");
 exsheet.export("c:\1.xls",true);
end;


Но вылетает на второй строчке - "Член группы не найден". Кто-нибудь работал с этим объектом и может прояснить ситуацию?


 
Думкин ©   (2006-09-26 08:16) [1]

> range := exsheet.range("A1:AA10000");
>  range := exsheet.range("A1");
>  range.numberformat := "@";
>  range.value("00150");
>  exsheet.export("c:\1.xls",true);

Эти строки - уже дело пятое, хотя если есть наметки - буду благодарен.


 
Думкин ©   (2006-09-26 08:34) [2]

Все пибил. Удивительно, но прокатило дальше и такой код сработал:

procedure TForm1.Button2Click(Sender: TObject);
var exappl,exsheet, range : OleVariant;
begin

 exappl :=  CreateOleObject("OWC.SpreadSheet");
 exsheet := exappl.ActiveSheet;
 range := exsheet.range["A1"];
 range.numberformat := "@";
 range.value := "00150";
 exsheet.export("c:\\1.xls");
end;


Только в ячейке по прежнему не "00150", а "150". :(


 
Сергей М. ©   (2006-09-26 09:55) [3]


> Думкин ©   (26.09.06 08:34) [2]


А что, использование объекта OWC.SpreadSheet для формирования xls-документа столь принципиально ?

Можно же обойтись вообще безо всяких олей-объектов для этой цели - формировать файл документа "напрямую", без посредников а-ля OWC.SpreadSheet или Excel.Application ..


 
MBo ©   (2006-09-26 10:34) [4]

А так не подойдет?

range.numberformat := "00000";
range.Value  := "00150";


 
umbra ©   (2006-09-26 10:36) [5]


>  range.numberformat := "@";

Вы устанавливаете денежный, а не строковый формат ячейки. Попробуйте $ вместо @


 
MBo ©   (2006-09-26 10:46) [6]

>umbra
как раз $ - денежный, а макрос изменения формата на текстовый и записи выглядит как:
Range("A1").Select
Selection.NumberFormat = "@"
ActiveCell.FormulaR1C1 = "00150"


 
umbra ©   (2006-09-26 10:54) [7]

Да, погорячился :(


 
Думкин ©   (2006-09-26 10:56) [8]

> Сергей М. ©   (26.09.06 09:55) [3]

Можно и напрямую. Но хотелось бы так. Это Аксапта - очень ограничен выбор. По хорошему, я бы кидал через ОЛЕ напрямую в Эксель - но в Х++ нет двумерных массивов. Придуманы разные способы ускоорения выгрузки данных в Эксель - для меня оптимален приведенный способ.

> MBo ©   (26.09.06 10:34) [4]

Сенкс. С меня кружка на встрече. :)
А с чем это связано?


 
Сергей М. ©   (2006-09-26 11:19) [9]


> Думкин ©   (26.09.06 10:56) [8]



> Можно и напрямую


Тогда предлагаю компромисс - реализовать свой олей-объект, напрямую пишущий в xls-файл и подключить его к X++ точно так же как OWC.
Ускорение, думаю, будет ощутимым.


 
umbra ©   (2006-09-26 11:25) [10]

посмотрел я хелп по этой OWC (от оффиса XP) и там приведен такой пример присваивания формата

Spreadsheet1.ActiveSheet.Range("F1:F10").NumberFormat = "Currency"

Может быть, если написать Text, то и формат будет текстовый?


 
Думкин ©   (2006-09-26 11:39) [11]

> umbra ©   (26.09.06 11:25) [10]

Когда проходит экспорт, то формат ячейки как и надо - текстовый. Но вот текст там "150", а не тот который нужен.

> Сергей М. ©   (26.09.06 11:19) [9]

Безусловно. На русскоязычном форуме по Аксапте эта тема изъезжена вдоль и поперек. Напрямую в файл самое быстрое. Например в XML.
Но тут еще проблема всплывает. Я использую это в одной штучке - формировании отчетов. Родные для Аксапты3 отчеты - экран,принтер,хтмл,ртф и текст(в 4 там иное, но ее у нас нет). А Экселя - нет. Естественно хочется.
С таблицами и прочими готовыми структурами данных - проблем нет. Хоть куда и хоть как пиши. А с отчетами возится приходится. Структура и формирование данных весьма запутано. Получить цельный массив данных не получается, да и хранить его в Аксапте - еще тот геморой.

Поэтому для меня указанное и удобно. И по качеству и по скорости. На данный момент "00000" устроит. Но в целом, конечно, хотелось бы иначе.

Хотя кому отчеты эти нужны в Эксель - поубивав бы. :) По-взрослому, аксапщики такие вещи иначе делают. Но... сказано сделано.


 
Сергей М. ©   (2006-09-26 12:12) [12]


> Думкин ©   (26.09.06 11:39) [11]


> Например в XML.


Зачем в XML-то ? Прямо в XLS !
Не всякий же Ёхель может работать с XML ..


 
Думкин ©   (2006-09-26 12:43) [13]

> Сергей М. ©   (26.09.06 12:12) [12]

Я же написал - например. Да хоть куда. Просто не катит мне это.


 
Думкин ©   (2006-09-26 12:49) [14]

> Сергей М. ©   (26.09.06 12:12) [12]

Хотя, вообще-то можно. Но это надо будет теткам устанавливать ходить. Ковыряться.... :)
Спасибо всем за внимание к вопросу. :)


 
Сергей М. ©   (2006-09-26 12:54) [15]


> Думкин ©   (26.09.06 12:49) [14]


> это надо будет теткам устанавливать ходить


От тебя потребуется самая малость - дать им, теткам, готовый олей-объект (с tlb и справкой, как полагается), который будет читать-писать в XLS-файл напрямую.

За базу можешь взять, к примеру, компонент TXLSReadWrite.
Общение с этим компонентом прозрачно и легко, поддерживает он все ёхельные форматы от 5-ки до ХР, демо-версия доступна для скачивания, стоит он дешево (купить - не проблема, сломать - еще меньшая проблема).


 
Думкин ©   (2006-09-26 13:12) [16]

> Сергей М. ©   (26.09.06 12:54) [15]

Нее. :) У меня другие задачи уже. Время жалко. Если только для общего развития. У Аксапщиков девиз простой: "минимум программирования". У меня его есть - но тоже стараемся минимизировать.


 
Думкин ©   (2006-09-27 13:27) [17]

Так надо:

procedure TForm1.Button2Click(Sender: TObject);
var exappl,exsheet, range : OleVariant;
   a : SheetExportActionEnum;
begin

 exappl :=  CreateOleObject("OWC.SpreadSheet");
 exsheet := exappl.ActiveSheet;
 range := exsheet.range["A1"];
 range.numberformat := "@";
 range.value := """00150";
 a := ssExportActionOpenInExcel;
 exsheet.export("c:\1.xls",a);
end;



Страницы: 1 вся ветка

Форум: "Corba";
Текущий архив: 2009.08.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.004 c
15-1243512133
oldman
2009-05-28 16:02
2009.08.02
Сбылась мечта идиота...


3-1225086355
hic
2008-10-27 08:45
2009.08.02
Передача данных из сохраненного отчета FastReport в Delphi


2-1244463286
Zemlyanov
2009-06-08 16:14
2009.08.02
Где “взять”компонент VaComm для работы с СОМ портом


15-1243507456
test
2009-05-28 14:44
2009.08.02
Как определить версию bpl?


15-1242296673
Sergey Masloff
2009-05-14 14:24
2009.08.02
Ну вот и привет зрению... :(





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский