【问题标题】:Excel interop and DataField orientationExcel 互操作和 DataField 方向
【发布时间】:2014-02-28 13:51:03
【问题描述】:

我正在编写一个 C# 程序,它可以打开并读取 Excel 文档并创建一个包含一些字段的数据透视表。以行的形式添加一个字段。其余的是计算的数据字段。一切正常,数据添加良好。只有一个问题。计算的数据字段也作为行添加,但我希望将它们作为列。在 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";

【问题讨论】:

  • 你是如何解决这个问题的?你能澄清一下吗?提前谢谢你!

标签: c# excel interop pivot-table


【解决方案1】:

你可能已经知道这个技巧了……

当您知道如何直接在 Excel 中执行某项操作并希望以编程方式实现相同的目标时,您可以很好地使用宏记录器(在开发人员工具中,请参见第一个屏幕截图)。之后,您必须使用 interop Excel 将 VBA 宏转换为 C#,但如果您了解一点 VB,这应该不难。

然后对于您的问题,我记录了将列字段拖放到行部分的操作。感谢记录的宏,您似乎可以通过拾取目标字段对象并更改其属性 OrientationPosition 来实现。

【讨论】:

  • 谢谢!很有用。我根本不怎么用 Excel,所以这是一个很好的提示!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-26
  • 1970-01-01
  • 2012-06-09
  • 2010-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多