![]() |
#8 |
Moderator
|
В общем, формулы оказались ни при чем. Точнее, "при чем", но как бы не по своей воле.
Всему "виной" программное построение диаграммы, которое, как выяснилось, весьма капризно, и успешное завершение этого процесса зависит даже от последовательности операторов. Например, поменяйте местами два самых последних оператора (казалось бы, абсолютно независимых) в нижеследующем демонстрационном джобе и вы получите сообщение об ошибке. Что касается формул, то всё получилось, как хотелось, после помещения кода по их созданию перед кодом для создания диаграммы. Опять-таки, если хотите увидеть, какие с ними были проблемы, перенесите код по "организации непрерывного диапазона" в место перед оператором series.XValues (см. комментарии). X++: { ComExcelDocument_RU doc = new ComExcelDocument_RU(); COM xlApp; COM wbook; COM activeSheet; int i; COM charts; COM activeChart; COM rangeOutputHeader; COM range; COM seriesCollection; COM series; ; doc.NewFile(); wbook = doc.getComDocument(); xlApp = wbook.Parent(); activeSheet = xlApp.ActiveSheet(); // генерация тестовых данных для примера for (i=1; i<=10; i++) doc.insertValue(ComExcelDocument_RU::numToNameCell(i,1), i*10); // тестовые значения для XValues for (i=5; i<=23; i+=2) doc.insertValue(ComExcelDocument_RU::numToNameCell(i,2), strFmt('Категория %1', i)); // организация непрерывного диапазона в AA2:AJ2 range = activeSheet.Range('AA2'); for (i=22;i>=13;i--) { range.FormulaR1C1(strFmt('=RC[-%1]', i)); range = range.Offset(0, 1); } rangeOutputHeader = activeSheet.Range('AA2:AJ2'); // построение диаграммы charts = wbook.Charts(); activeChart = charts.Add(); activeChart.ChartType(5); // 5 = xlPie activeChart.SetSourceData(activeSheet.Range('A1:J1')); series = activeChart.SeriesCollection(1); // немного странно, что это работает, не требуя промежуточного series = seriesCollection.Item(1); // если организацию непрерывного диапазона перенести сюда, // то будут описанные выше проблемы с формулами series.XValues(rangeOutputHeader); // и, как хотелось, здесь Range, а не стринг activeChart.Location(2, activeSheet.Name()); // 2 = xlLocationAsObject } X++: // организация непрерывного диапазона в AA2:AJ2 rangeOutputHeader = activeSheet.Range('AA2:AJ2'); rangeOutputHeader.FormulaArray('=INDEX(RC[-22]:RC[-4],{1,3,5,7,9,11,13,15,17,19})'); // построение диаграммы |
|
|
За это сообщение автора поблагодарили: G.Menshikh (1), kornix (1). |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|