Excel互操作和DataField方向

我正在编写一个C#程序,它打开并读取一个Excel文档,并创build一个包含一些字段的数据透视表。 一个字段被添加为面向行。 其余的是计算的数据字段。 一切正常,数据添加正常。 只有一个问题。 计算的数据字段也作为行添加,但我希望将它们作为列。 在Excel中,手动这样做意味着将值从行拖到列。 但是,我如何实现相同的编程?

我的代码:

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"; 

你可能已经知道这个诀窍…

当你知道如何直接在Excel中做某些事情,并且想要以相同的编程方式实现时,可以很好地使用macroslogging器(在开发人员工具中,请参阅第一个截图)。 之后,您必须使用interop Excel将VBAmacros转换为C#,但如果您知道一点VB,那就不难了。

如何找到宏记录器

那么对于你的问题,我logging了拖动一个列字段到行部分的动作。 由于macroslogging,似乎你可以通过拾取目标场对象并改变其属性方向位置来实现这一点。

拖放操作

录制的宏