我正試圖在Excel中實作一系列PivotCharts的自動化。 我正在使用Delphi Rio和Excel 2019。 我有一個XLSX檔案,有一個作業表,叫做 "Sheet1"。 我在Excel中啟用了記錄宏,并記錄了VBA代碼。 我已經把它移植到了Delphi。 一切都在編譯中,當我去添加我的行欄位(在PivotChart中成為軸欄位)時,我得到一個AV。 在Excel中,為了記錄這個宏,我選擇了有資料的作業表,進入Insert/Pivot Chart,選中 "將資料添加到資料模型",然后建立一個簡單的PivotChart。
VBA代碼是
Cells.Select
Workbooks("TestFile.xlsx").Connections.Add2 "WorksheetConnection_Sheet1!$A:$CU" _
, "", "WORKSHEET;S:Temp[TestFile.xlsx]Sheet1", "Sheet1!$A:$CU", 7, true, _
假的
表.添加
ActiveWorkbook.PivotCaches.Create(SourceType:=xlExternal, SourceData:= _
ActiveWorkbook.Connections("WorksheetConnection_Sheet1!$A:$CU"), Version:=7) 。_
CreatePivotChart(ChartDestination:="Sheet3").Select
ActiveChart.ChartType = xlColumnClustered
ActiveChart.ChartStyle = 201.
With ActiveChart.PivotLayout.PivotTable.CubeFields("[Range]. [Fiscal Quarter]")
.方向 = xlRowField
.位置 = 1
結束 與
With ActiveChart.PivotLayout.PivotTable.CubeFields("[范圍].[領土名稱")
.方向 = xlColumnField
.位置 = 1 結束 與
ActiveChart.PivotLayout.PivotTable.CubeFields.GetMeasure "[范圍].[管線]", _
xlSum, "Sum of Pipeline"
ActiveChart.PivotLayout.PivotTable.AddDataField ActiveChart.PivotLayout. _
PivotTable.CubeFields("[措施].[Sum of Pipeline]"), "Sum of Pipeline"
我遇到的問題(當運行我的Delphi編譯的可執行檔案時)是在添加 "財政季度 "行欄位時。它似乎沒有定義CubeFields,盡管當我把滑鼠放在它上面時,我得到了 "無法訪問的資料"。 所以我的第一個問題,在Delphi中,CubeFields是自動創建的嗎?
我的Delphi代碼是
procedure BuildPivotChart;
var
myChart: _Chart;
myChartShape: Shape;
myPivotCache: PivotCache;
SourceSheet, DestSheet: _Worksheet;
myConnection: WorkbookConnection;
ConnName, ConnString, ConnCommand: String。
begin[/span
//創建連接,因為我們要添加到DataModel。
ConnName := 'WorksheetConnection_Sheet1!$A:$CU'。
ConnString := 'WORKSHEET;S:Temp[TestFile.xlsx]Sheet1'。
ConnCommand := 'Sheet1!$A:$CU';
myConnection := oExcel.ActiveWorkbook.Connections.Add2(ConnName, ', ConnString, ConnCommand, 7, True, False);
//創建一個新的作業表,并獲得它的句柄...。
oExcel.Worksheets.Add(EmptyParam, EmptyParam,1, xlWorksheet, LCID ) 。
//獲取新作業表的句柄并設定作業表名稱。
DestSheet := oExcel.ActiveSheet as _Worksheet;
DestSheet.Name := 'Graphs';
//創建一個Pivot Cache,有一個圖表物件。
myPivotCache := oExcel.ActiveWorkbook.PivotCaches.Create(xlExternal, myConnection, 7) 。
myChartShape := myPivotCache.CreatePivotChart(DestSheet, xlColumnClustered, 10, 10, 300, 300) 。
myChartShape.Select(EmptyParam);
myChart := oExcel.ActiveChart;
myChart.ChartStyle := 201;
if oExcel.ActiveChart.PivotLayout.PivotTable.PivotCache.IsConnected = True then
ShowMessage('Connected')。
//現在添加行欄位。
//下面的三行都是AV。
oExcel.ActiveChart.PivotLayout.PivotTable.CubeFields.AddSet('[Range].[Fiscal Quarter]', 'MyName').方位 := xlRowField;
oExcel.ActiveChart.PivotLayout.PivotTable.CubeFields['[Range].[Fiscal Quarter]'].Orientation := xlRowField。
//認為CUBE沒有被定義......檢查看立方體欄位數...
ShowMessage(IntToStr(oExcel.ActiveChart.PivotLayout.PivotTable.CubeFields.Count)) 。
...
當我瀏覽我的Delphi代碼時,在'myPivotCache.CreatePivotChart'一行,我看到圖表物件在Excel中顯示出來,并且我看到我的列在Excel右側的Pivot中被選中。 我懷疑CubeFields出了問題,但我無法證明,或者說我不知道如何解決它...... 我確實得到了我的 "連接 "彈出視窗。
希望得到任何幫助或想法。
uj5u.com熱心網友回復:
這個問題發生在使用EXCEL_TLB單位時。
可以通過改成OLE開發來解決。
uj5u.com熱心網友回復:
使用添加單元 "Excel2010 "到 "Uses "后的介面,如。 介面 uses Excel2010
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/316506.html
標籤:
上一篇:錯誤:沒有選擇訪問查看的權限
