Форум: "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