|
06.05.2010, 14:54 | #1 |
Участник
|
Цитата:
Сообщение от Gustav
Роман, у меня два вопроса:
Последний раз редактировалось Roman N. Krivov; 06.05.2010 в 15:34. |
|
06.05.2010, 16:17 | #2 |
Moderator
|
Цитата:
И как боретесь? В коде что-то отрабатывает или вручную? На картинке-то у вас вроде нормальный вид объединенных ячеек... |
|
06.05.2010, 16:39 | #3 |
Участник
|
Цитата:
X++: . . .
wkss = comDocument.Worksheets();
wks = wkss.Item(cvActiveWks);
rng = wks.Range(_bookmark); // _bookmark = "19:19"
this.insertRows(rng.row(), rng.row() + 1, rstAxa.RecordCount() - 1);
cell = rng.Offset(0,0);
cell.CopyFromRecordset(rstAxa);
. . . X++: protected void insertRows(int _fromRow, int _toRow, int _numOfCopies) { COM comRows, comWorkSheet, comRow, comRowTarget, selection; COMVariant comRowVariant, selVariant; ; if (! _numOfCopies) return; if (! comDocument) throw error(strFmt("@DIS6401", "Excel.Application")); comRow = this.findRange(strFmt("%1:%2", _fromRow, _fromRow)); comRow.copy(); comRowTarget = this.findRange(strFmt("%1:%2", _toRow, _toRow + _numOfCopies - 1)); comRowTarget.select(); comRowTarget.insert(/*#xlShiftDown*/); comWorkSheet = this.getWorkSheet(cvActiveWks); comRows = comWorkSheet.cells(); comRows = COM::createFromVariant(comRows.item(1)); comRows.select(); comExcelApplication.cutCopyMode(false); } |
|
06.05.2010, 16:47 | #4 |
Участник
|
Сейчас немного поэкспериментировал
Первый эксперимент
Суть эксперимента Взял шаблон, добавил в него 32 строки, установил форматы ячеек и убрал из года добавление новый строк. Запустил формирование отчёта для 7строк. Результат В ячейках вместо чисел стоит дата, например: 03.09.1903, вместо 1342,56 Второй эксперимент Суть эксперимента Запустил формирование отчета без шаблона. Результат В ячейках вместо чисел стоит дата, например: 03.09.1903, вместо 1342,56 Последний раз редактировалось Roman N. Krivov; 06.05.2010 в 16:55. |
|
06.05.2010, 16:51 | #5 |
Moderator
|
Цитата:
X++: cell = rng.Offset(0,0); // сейчас это целая строка 19 cell = rng.Resize(1,1); // а станет одиночная ячейка A19 |
|
06.05.2010, 17:01 | #6 |
Участник
|
|
|
06.05.2010, 17:15 | #7 |
Moderator
|
Ох, ну, славно! Хотя по идее должно было работать и с полной строкой 19 (это я так... чисто эвристически делал предположение).
Всё-таки не совсем понятно, почему даже на пустом Excel происходило... Как-то у вас дата, похоже, крепко хваталась со второй колонки и не "отпускалась" до конца строки. Напоминает поведение типа anytype, когда он принимает тип первого присваивания... А покажите цикл заполнения рекордсета? (на радостях) |
|
07.05.2010, 09:34 | #8 |
Участник
|
Цитата:
Цитата:
Сообщение от Gustav
Всё-таки не совсем понятно, почему даже на пустом Excel происходило... Как-то у вас дата, похоже, крепко хваталась со второй колонки и не "отпускалась" до конца строки. Напоминает поведение типа anytype, когда он принимает тип первого присваивания...
А покажите цикл заполнения рекордсета? (на радостях) X++: . . .
rstAxa.AddNew();
for(i=1; i<=arrFields.lastIndex(); i++)
{
cv = this.getValueVariant(conpeek(con, i));
fld = flds.Item(i-1);
fld.Value(cv);
}
rstAxa.Update();
. . . X++: protected COMVariant getValueVariant(anytype _value) { COMVariant ret; ; switch(typeof(_value)) { case Types::Date : ret = COMVariant::createFromDateAndTime(_value, 0); break; case Types::Real : ret = COMVariant::createFromReal(_value); break; case Types::Integer : ret = COMVariant::createFromInt( _value); break; case Types::String : case Types::RString : case Types::VarString : ret = COMVariant::createFromStr( _value); break; default : callStack2infolog(); throw error(strfmt(@"%1(): Не знаю, как преобразовать значение из типа %2 в %3", funcname(), typeof(_value), classstr(COMVariant))); } return ret; } |
|
Теги |
ado, comvariant, excel, faq, odbc, sql, интеграция, прямой доступ, формат дат, экспорт, экспорт в excel |
|
|