25.03.2003, 17:52 | #1 |
Lean Six Sigma
|
Экспорт в Excel - поле формата "Дата"
Всем привет!
Ситуация: программно создаю ExcelWorkbook, нахожу ячейку, далее Cell.value2( SystemDateGet()); Cell.numberFormat( " Далее мысль обрывается... Никто не сталкивался с форматированием даты? |
|
25.03.2003, 18:03 | #2 |
Модератор
|
Гораздо лучше будет сначала форматировать ячейку, а потом ей значения присваивать. Это раз.
Два. В чем проблема? В строке формата? Мне "dd.mm.yy" больше всего нравится. |
|
25.03.2003, 18:08 | #3 |
Участник
|
Для экспорта в Excel можно использовать класс ComExcelDocument_RU, который берет на себя выполнение простых операций с Excel
|
|
25.03.2003, 18:17 | #4 |
Lean Six Sigma
|
дописываем:
Cell.numberFormat("dd.mm.yy"); Cell.value2(SystemDateGet()); на выходе - "dd.mm.yy" вместо самой даты |
|
25.03.2003, 18:37 | #5 |
Lean Six Sigma
|
to LTA: я его и использую.
Интересуют две простые операции: 1. Назначение цвета фона для ячейки - Cell.Interior().color() - почему-то ячейки перекрашиваются в радикальный чёрный цвет 2. Форматирование даты - вылетает по ошибке. |
|
25.03.2003, 18:40 | #6 |
Модератор
|
А зачем Value2?
Все уже читали про SysExcelImport, но у меня очень долго жил в другом приложении код, который бегал по рекордсету и в зависимости т типа поля формировал NumberFormat и присваивал Value, и все как-то жило. Цитата:
на выходе - "dd.mm.yy" вместо самой даты
Sub test() ActiveCell.NumberFormat = "dd.mm.yy" ActiveCell.Value2 = Now ActiveCell(2, 1).Activate ActiveCell.NumberFormat = "dd.mm.yy" ActiveCell.Value = Now End Sub все работает |
|
25.03.2003, 18:59 | #7 |
Lean Six Sigma
|
Ну-ну...
В VBA мы все мастера - и copyFromRecordset сделаем и сводную таблицу сляпаем. Но при запуске Excel как сервер автоматизации выясняется, что не все методы выглядят так же, как и в VBA. |
|
25.03.2003, 19:30 | #8 |
Модератор
|
Ну-ну
Цитата:
В VBA мы все мастера - и copyFromRecordset сделаем и сводную таблицу сляпаем
Что касается цвета COMCell = COMAppl.activecell(); COMInterior = COMCell.Interior(); COMInterior.Color(WINAPI::RGB2int(255,0,0)); Оно таки красное Что касается нелюбимого Вами VBA: если запустить MsgBox ActiveCell.NumberFormat MsgBox ActiveCell.NumberFormatLocal стоя на ячейке, в которой присваивание даты свалилось, видно, что NumberFormat забит слэшами, которых там быть не должно |
|
26.03.2003, 12:05 | #9 |
Lean Six Sigma
|
За цвет спасибо!
По поводу сабжа - пришлось сдаться: Cell.value2(strfmt(" %1",PLine.EXWDate)); |
|
26.03.2003, 17:06 | #10 |
Участник
|
вместо Cell.numberFormat("dd.mm.yy") попробуй
Cell.numberFormatLocal("ДД.ММ.ГГ") |
|
26.03.2003, 19:14 | #11 |
Lean Six Sigma
|
Насчёт NumberFormatLocal - спасибо действительно работает. Непонятно, почему не работает NumberFormat. И вообще - может быть существует более производительный способ вывода данных в Excel, чем через аутомэйшен по ячейкам?
|
|
27.03.2003, 09:54 | #12 |
Участник
|
Похоже это глюки в реализации com-сервера Еxcel, в Delphi всё аналогично.
(хотя к VB это не относится). Более производительно передавать данные через вариантный массив в выбранный range. В Axapta не пробовал, а в Delphi выглядит примерно так: var ArrayData: Variant; ... ArrayData := VarArrayCreate([1, 10, 1,10]); // fill array for I := 1 to 10 do for J:= 1 to 10 do ArrayData[I,J]:= ... ; .... Range[ Cells.Item[1,1], Cells.Item[10,10] ].Value := ArrayData; |
|
27.03.2003, 11:40 | #13 |
Lean Six Sigma
|
За массив опять спасибо. В аксапте тоже получилось:
doc.findRange(strfmt("A%1:",Num) + COMExcelDocument_RU::numToNameCell(Arr.lastIndex(),Num)).value2( COMVariant::createFromArray(Arr)); Скорость вывода увеличилась в разы. |
|
24.04.2003, 13:40 | #14 |
Участник
|
Если не трудно, нельзя ли отобразить весь код по вставки значений в Excel из массива (с описанием Num и Arr)
|
|
24.04.2003, 19:53 | #15 |
Участник
|
А заодно подскажите, как узнать, какие свойства и методы (и какая сигнатура методов) есть у какого-либо Com - объекта
|
|
25.04.2003, 10:01 | #16 |
NavAx
|
в tlb, exe, dll файлике подглядеть, type library editor'ом.
|
|
Теги |
excel |
|
|