如何在Excel图表中禁用自动创buildSeriesCollection

我已经有这个代码

Excel::_ApplicationPtr app("Excel.Application"); app->Visible[0] = false; Excel::_WorkbookPtr book = app->Workbooks->Add(); Excel::_WorksheetPtr sheet = book->Worksheets->Item[1]; RangePtr pRange = sheet->Cells; RangePtr pCell; pCell = pRange->Item[1][1]; // A1 pCell->Value2 = "1"; pCell = pRange->Item[1][2]; // B1 pCell->Value2 = "1"; pCell = pRange->Item[1][3]; // C1 pCell->Value2 = "10"; pCell = pRange->Item[2][1]; // A2 pCell->Value2 = "3"; pCell = pRange->Item[2][2]; // B2 Cell->Value2 = "1"; pCell = pRange->Item[2][3]; // C2 pCell->Value2 = "20"; 

和下一个

 Excel::RangePtr pBeginRange = pRange->Item[1][1]; Excel::RangePtr pEndRange = pRange->Item[5][9]; Excel::RangePtr pTotalRange = sheet->Range[(Excel::Range *)pBeginRange][(Excel::Range *)pEndRange]; _ChartPtr pChart2 = book->Charts->Add(); pChart2->ChartType = xlBubble3DEffect; pChart2->SetSourceData((Excel::Range *)pTotalRange, (long)Excel::xlColumns); 

如何在Excel图表中禁用自动创buildSeriesCollection。 我想手动设置范围。 在自动创build中,所有Seri​​esCollection在第一列中都有XValues。 但我不需要它。

可能无法阻止它被创build,但可以在创build图表后立即将其删除,然后根据需要创build自己的系列。

在VBA中:

 Set Chrt = wb.Charts.Add() Chrt.SeriesCollection(1).Delete 

我也遇到过同样的问题。 从实验中,我认为以下事情正在发生:

使用以下代码在VBA中创build新图表时

 Dim chSheet As Chart Set chSheet = Charts.Add 

Excel,试图有帮助,我敢打赌,当你从开发者窗口执行你的代码时,会自动查看你的光标select了哪个工作表,并search它认为可能是图的一个值范围的最近的数据集。 然后这会自动填充在图表中。 到目前为止,我发现的唯一方法是执行以下代码,在创build图表后立即删除图表上系列集合对象中的所有系列对象。 触摸计数器直观,但它的作品…

 Public Sub DeleteChartSeries(chartSheet As Chart) 'Shorter but perhaps less clean way of writing the code compared to below Do Until chartSheet.SeriesCollection.Count = 0 chartSheet.SeriesCollection(1).Delete Loop 'With chartSheet ' Do Until .seriesCollection.Count = 0 ' .seriesCollection(1).Delete ' Loop 'End With End Sub 

只需要解决方法:首先将光标移到UsedRange之外的UsedRange ,然后创buildChart:不会执行自动检测。 然后回去。

换句话说,下面的代码适用于我(Excel 2007):

 ' Assume src As Range (proposed source data for the chart) in the ActiveSheet. ' put the cursor somewhere outside the UsedRange to avoid Excel's ' 'helpful' auto detection. Dim ur As Range Set ur = src.Worksheet.UsedRange ur.Cells(1, ur.Columns.Count).Offset(0, 2).Select Dim crt As Chart Set crt = src.Worksheet.Shapes.AddChart().Chart ' ^ does NOT do auto-detection.