2014-02-28 90 views
4

我正在寫一個C#程序,它打開並讀取一個Excel文檔,並創建一個包含一些字段的數據透視表。一個字段被添加爲面向行。其餘的是計算的數據字段。一切正常,數據添加正常。只有一個問題。計算的數據字段也作爲行添加,但我希望將它們作爲列。在Excel中,手動操作意味着將值從行拖到列。但是,我如何實現相同的編程?Excel互操作和DataField方向

我的代碼:

Excel.PivotTable pivot1 = xlSheet.PivotTableWizard(
       Excel.XlPivotTableSourceType.xlDatabase, // source type 
       pivotRange, // source 
       xlSheet.get_Range(Constants.PLACE_PIVOT_1), //destination 
       "Grade", // table name 
       false, 
       false, 
       true, 
       false, 
       missing, 
       missing, 
       false, 
       false, 
       Excel.XlOrder.xlDownThenOver, 
       missing, 
       missing, 
       missing); 

      Excel.PivotField betygField = 
       (Excel.PivotField)pivot1.PivotFields("Grade type"); 
      betygField.Orientation = 
       Excel.XlPivotFieldOrientation.xlRowField; 
      betygField.Position = 1; 

      // int dataIndex = 2; 
      for (int f = Constants.START_START_SAMMAN; f < columns; f++) //add some array of columns as DataFields 
      { 
       string name = Convert.ToString(xlSheet.Cells[Constants.BEGIN_STAT_SAMMAN_Y, f].Value); 

       Excel.PivotField f1 = pivot1.AddDataField((Excel.PivotField)pivot1.PivotFields(name), 
        String.Format("Sume of {0}", name), Excel.XlConsolidationFunction.xlSum); 
       Excel.PivotField f2 = pivot1.AddDataField((Excel.PivotField)pivot1.PivotFields(name), 
        String.Format("Avg. of {0}", name), Excel.XlConsolidationFunction.xlAverage); 

       f1.Orientation = 
       Excel.XlPivotFieldOrientation.xlDataField; 
       f1.NumberFormat = "0.00"; 

       f2.Orientation = 
       Excel.XlPivotFieldOrientation.xlDataField; 
       f2.NumberFormat = "0.00"; 
      } 

      pivot1.GrandTotalName = "Totalt"; 
      pivot1.RowGrand = true; 
      pivot1.ColumnGrand = true; 
      pivot1.TableStyle2 = "PivotStyleLight16"; 
+0

你怎麼mannage來解決這個問題?你能澄清一下嗎? 提前謝謝! –

回答

4

你可能已經知道這一招...

當你知道該怎麼做,直接在Excel中的東西,你希望通過編程實現同樣的,你可以做一個宏記錄器的良好用法(在開發人員工具中,請參閱第一張截圖)。之後,您必須使用interop Excel將VBA宏轉換爲C#,但是如果您知道一點VB並不難。

How to find the macro recorder

那麼對於你的問題我錄拖動和列字段拖放到行部分的動作。由於宏記錄,似乎你可以通過撿起目標場對象並改變其屬性來實現定位位置

The drag and drop action

The recorded macro

+0

謝謝!很有用。我根本不使用Excel,所以這是一個很好的提示! – Lobuno