Показать сообщение отдельно
Старый 29.11.2010, 10:01   #6  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
414 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
Цитата:
Сообщение от AndyD Посмотреть сообщение
Потому что, надо так
X++:
Chart.Type(23); // chChartTypeScatterSmoothLine
Вообще, у Office Web Components очень сильно отличается объектная модель от обычного офиса. Да и по возможностям они далеко не эквивалентны
Microsoft Office Web Components Visual Basic Reference
интересно, почему? Вот это работает корректно (в 2003-м):

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
}
Взял из обсуждения, сам так делал.