![]() |
#11 |
Moderator
|
Господа, мне наконец удалось получить это сообщение об ошибке: 0xE004002C The selected cells cannot be merged. The range partially intersects a merged cell. Воспроизвелось на OWC.Spreadsheet (и на 10, и на 11) и на Axapta 3.0. В Excel не воспроизвелось (интересно, о каком же "Excel" мы все-таки тут рассуждаем?
![]() Суть проблемы не в номере строки, а в количестве выполненных операций Merge на одном листе - 32766. Это максимум. Далее вылетает вышеупомянутое сообщение. Но обо всём по порядку. Вот джоб, реабилитирующий Excel (на каждом шаге по два Merge, и общее их кол-во значительно превышает 32766 - проблем нет): X++: { COM rng = SysExcelApplication::construct().workbooks().add().worksheets().itemFromNum(1).range('A1').comObject(); COM wks = rng.Parent(); COM cells = wks.Cells(); int i; ; COM::createFromObject(rng.Application()).Visible(true); for (i=1; i<=65536-1; i+=2) // только Excel 2003 был в распоряжении { rng = wks.Range(cells.Item(i,1),cells.Item(i+1,1)); rng.Merge(); rng.Value2(i); rng = wks.Range(cells.Item(i,2),cells.Item(i+1,2)); rng.Merge(); rng.Value2(i); } } X++: { Form form = new Form(); Args args = new Args(); FormRun formRun; FormActiveXControl ss; COM worksheet; COM range; COM cells; int i; COM rng = SysExcelApplication::construct().workbooks().add().worksheets().itemFromNum(1).range('A1').comObject(); COM wks = rng.Parent(); COM clls = wks.Cells(); int j; ; COM::createFromObject(rng.Application()).Visible(true); form.addDesign('Design'); args.object(form); formRun = classFactory.formRunClass(args); formRun.init(); formRun.design().caption('Табличный процессор'); ss = formRun.design().addControl(FormControlType::ActiveX, 'Spreadsheet'); //ss.className('{0002E541-0000-0000-C000-000000000046}'); // Microsoft Office Spreadsheet 10.0 ss.className('{0002E559-0000-0000-C000-000000000046}'); // Microsoft Office Spreadsheet 11.0 ss.heightMode(FormHeight::ColumnHeight); ss.widthMode(FormWidth::ColumnWidth); range = ss.Range('A1'); worksheet = range.Parent(); cells = worksheet.Cells(); j=0; //for (i=1; i<=80000-1; i+=2) //for (i=1; i<=32766; i++) for (i=1; i<=20; i++) { j++; // вывод в Excel для визуализации счетчика rng = COM::createFromVariant(clls.Item(j)); rng.Value2(j); // вывод в Speadsheet //range = ss.Range(cells.Item(i,1),cells.Item(i+1,1)); range = ss.Range(cells.Item(i,1),cells.Item(i,2)); range.Merge(); range.Value2(i); //range = ss.Range(cells.Item(i,2),cells.Item(i+1,2)); //range = ss.Range(cells.Item(i,3),cells.Item(i,6)); //range.Merge(); //range.Value2(i); } formRun.run(); formRun.wait(); } Ограничение 32766 действует в пределах текущего рабочего листа, которых в Spreadsheet'е по умолчанию три: Sheet1, Sheet2, Sheet3. |
|
|
За это сообщение автора поблагодарили: S.Kuskov (2), Cardagant (1). |
Теги |
excel, merge, owc, spreadsheet |
|
|