![]() |
#32 |
Moderator
|
Размышляя, набросал тут 3 демонстрационных цикла вывода в Excel (чуть позже добавил четвертый):
X++: static void Job_TestFourLoops(Args _args) { ComExcelDocument_RU doc = new ComExcelDocument_RU(); COM xlApp; COM wbook; COM range, range1, range2; int i; #define.xlDown(-4121) #define.xlPasteFormats(-4122) ; doc.NewFile(); wbook = doc.getComDocument(); xlApp = wbook.Parent(); // ВАРИАНТ 1 // тестовая подготовка первой ячейки с именем и форматом range = xlApp.Range('B3'); range.Name('test'); COM::createFromObject( range.Font() ).Bold(true); // все время писать в test, смещая его вниз за счет вставки строк // и перекидывая формат на ячейку выше for (i=1;i<=10;i++) { doc.insertValue('test', i); doc.copyAndInsertRange('test'); } doc.insertValue('test',''); // ВАРИАНТ 2 // тестовая подготовка первой ячейки с именем и форматом range = xlApp.Range('B15'); range.Name('test2'); COM::createFromObject( range.Interior() ).ColorIndex(36); // прописывание значений range = xlApp.Range('test2'); // как если бы букмарк уже существовал в файле for (i=1;i<=10;i++) { // в цикле только пишем значения, не форматируем // адрес зависит от счетчика цикла range1 = COM::createFromVariant( range.Item(i,1) ); doc.insertValue( range1.Address() ,i); } // в конце скопировать формат первой ячейки на все остальные range2 = xlApp.Range(range, range.End(#xlDown)); range.Copy(); range2.PasteSpecial(#xlPasteFormats); xlApp.CutCopyMode(false); // ВАРИАНТ 3 // тестовая подготовка первой ячейки с именем и форматом range = xlApp.Range('B27'); range.Name('test3'); COM::createFromObject( range.Font() ).Bold(true); COM::createFromObject( range.Interior() ).ColorIndex(5); // прописывание значений range = xlApp.Range('test3'); // как если бы букмарк уже существовал в файле range1 = range; for (i=1;i<=10;i++) { // в цикле только пишем значения, не форматируем // адрес не зависит от счетчика цикла doc.insertValue( range1.Address(), i); range1 = range1.Offset(1,0); } // в конце скопировать формат первой ячейки на все остальные range2 = xlApp.Range(range, range.End(#xlDown)); range.Copy(); range2.PasteSpecial(#xlPasteFormats); xlApp.CutCopyMode(false); // ВАРИАНТ 4 // тестовая подготовка первой ячейки с именем и форматом range = xlApp.Range('B39'); range.Name('test4'); COM::createFromObject( range.Borders() ).LineStyle(1); COM::createFromObject( range.Font() ).Bold(true); // прописывание значений range = xlApp.Range('test4'); for (i=1;i<=10;i++) { // вставляем выше 'test4' строку с форматированием doc.copyAndInsertRangeNew('test4'); // получаем объектную переменную для строки на одну выше 'test4' range1 = range.Offset(-1,0); // пишем в строку выше 'test4' doc.insertValue( range1.Address(), i); // range c 'test4' на каждом шаге опускается ниже и ниже // а range1 следует за ним строкой выше, олицетворяя собой новую вставленную строку // которая рождается с исходными (пустыми) значениями 'test4', а потом переписывается текущими } // в конце остается пустая строка с 'test4', которую можно удалить doc.deleteRow(range.Row()); } |
|