gpt4 book ai didi

c# - 为什么我的数据透视表字段名称被视为无效和/或我的数据被视为未组织为带有标签列的列表?

转载 作者:行者123 更新时间:2023-11-30 23:23:57 25 4
gpt4 key购买 nike

注意:我有一个相关问题here ,但已完全更改代码并仍然收到相同的错误消息,即“数据透视表字段名称无效。要创建数据透视表,您必须使用组织为带有标签列的列表的数据。如果您正在更改数据透视表字段的名称,您必须为该字段键入一个新名称。"

正如您在下面的代码中看到的,数据透视表字段被赋予了名称(首先是“描述”,然后是“月份”):

private void AddPivotTable()
{
var pch = _xlBook.PivotCaches();
pch.Add(XlPivotTableSourceType.xlDatabase, "A6:F94")
.CreatePivotTable(_xlSheet.Cells[6, 1], "PivTab1", Type.Missing, Type.Missing);

var pvt = _xlSheet.PivotTables("PivTab1") as PivotTable;
if (pvt != null)
{
pvt.MergeLabels = true;
pvt.ErrorString = "";
pvt.DisplayErrorString = true;

var fld = ((PivotField)pvt.PivotFields("Description"));
fld.Orientation = XlPivotFieldOrientation.xlRowField;

fld = ((PivotField)pvt.PivotFields("Month"));
fld.Orientation = XlPivotFieldOrientation.xlColumnField;
fld.NumberFormat = "MMM yy";
fld.DataRange.Interior.Color = ColorTranslator.ToOle(Color.LightBlue);
}
}

我认为问题可能在于相同的 PivotField(“fld”)被用于“Description”行字段和“Month”列字段,所以我将代码重构为:

private void AddPivotTable()
{
var pch = _xlBook.PivotCaches();
pch.Add(XlPivotTableSourceType.xlDatabase, "A6:F94")
.CreatePivotTable(_xlSheet.Cells[6, 1], "PivTab1", Type.Missing, Type.Missing);

var pvt = _xlSheet.PivotTables("PivTab1") as PivotTable;
if (pvt != null)
{
pvt.MergeLabels = true;
pvt.ErrorString = "";
pvt.DisplayErrorString = true;

var descriptionPivotField = (PivotField)pvt.PivotFields("Description");
descriptionPivotField.Orientation = XlPivotFieldOrientation.xlRowField;

var monthPivotField = (PivotField)pvt.PivotFields("Month");
monthPivotField.Orientation = XlPivotFieldOrientation.xlColumnField;
monthPivotField.NumberFormat = "MMM yy";
monthPivotField.DataRange.Interior.Color = ColorTranslator.ToOle(Color.LightBlue);
}
}

...但这没什么区别;它仍然告诉我数据透视表字段名称无效 - 但哪个是“描述”或“月份”?两个都?为什么? ISTM 错误消息具有误导性或名称要求很奇怪。

当代码运行并生成工作表时,它应该看起来像这样,带有“Month”和“Description”数据透视表字段:

enter image description here

这是我生成的工作表当前的样子,但没有数据透视表或其字段(这是注释掉数据透视表代码时生成的内容):

enter image description here

问题的可能真正原因可能与错误消息的第二部分有关,即“...您必须使用组织为带有标签列的列表的数据。”但正如您在上面的屏幕截图中看到的那样,数据从 A6(标题行的第一列)开始,并继续通过 F 列和第 94 行测试数据:

enter image description here

(实际上,数据在总计行接管之前继续到第 1570 行)。

我收到的完整错误信息是:

数据透视表字段名称无效。要创建数据透视表,您必须使用组织为带有标签列的列表的数据。如果要更改数据透视表字段的名称,则必须为该字段键入一个新名称。异常来源:Microsoft Office Excel异常 StackTrace:在 System.Dynamic.ComRuntimeHelpers.CheckThrowException(Int32 hresult,ExcepInfo&excepInfo,UInt32 argErr,字符串消息) 在 CallSite.Target(闭包,CallSite,ComObject,对象,字符串,对象,对象) 在 System.Dynamic.UpdateDelegates.UpdateAndExecute5[T0,T1,T2,T3,T4,TRet](CallSite 站点,T0 arg0,T1arg1,T2 arg2,T3 arg3,T4 arg4) 在 CallSite.Target(闭包,CallSite,PivotCache,对象,字符串,对象,对象) 在 System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid5[T0,T1,T2,T3,T4](CallSite 站点,T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4) 在 C:\Projects\ReportRunner\ReportRunner 中的 ReportRunner.ProduceUsage.ProduceUsageRpt.AddPivotTable()\ProduceUsage\ProduceUsageRpt.cs:第 3195 行 在 C:\Projects\ReportRunner 中的 ReportRunner.ProduceUsage.ProduceUsageRpt.GenerateProduceUsageRpt()\ReportRunner\ProduceUsage\ProduceUsageRpt.cs:第 192 行

第 3195 行是这个:

pch.Add(XlPivotTableSourceType.xlDatabase, "A6:F94")
.CreatePivotTable(_xlSheet.Cells[6, 1], "PivTab1", Type.Missing, Type.Missing);

第 192 行是对 AddPivotTable() 的调用

更新

cyboashu的回答听起来很有希望,但我不知道他例子中的“Sheet1”是工作表对象的名称还是工作表名称。

这是我的代码:

private Worksheet _xlSheet; 

private static readonly String ProduceUsageByMonthSheetName = "Produce Usage by Month";
_xlSheet.Name = ProduceUsageByMonthSheetName;

...我尝试了所有我能想到的排列方式:

//pch.Add(XlPivotTableSourceType.xlDatabase, _xlSheet.Range("A6:F94")) //"PivotData!A1:H" + rowIdx)
//pch.Add(XlPivotTableSourceType.xlDatabase, _xlSheet!"A6:F94")
//pch.Add(XlPivotTableSourceType.xlDatabase, ProduceUsageByMonthSheetName!"A6:F94")
//pch.Add(XlPivotTableSourceType.xlDatabase, ProduceUsageByMonthSheetName.Range("A6:F94"))
//pch.Add(XlPivotTableSourceType.xlDatabase, "Produce Usage by Month"!"A6:F94")
pch.Add(XlPivotTableSourceType.xlDatabase, "Produce Usage by Month".Range("A6:F94"))
.CreatePivotTable(_xlSheet.Cells[6, 1], "PivTab1", Type.Missing, Type.Missing);

...但它们都无法编译:

最佳答案

您没有提供完整的限定范围地址。

.Add(XlPivotTableSourceType.xlDatabase, "A6:F94")
.CreatePivotTable(_xlSheet.Cells[6, 1], "PivTab1", Type.Missing, Type.Missing);

更改 "A6:F94" 以包含工作表名称,例如 Sheet1!"A6:F94"Sheet1.Range("A6:F94"")

它将纠正错误。Excel 对象模型中的错误消息有点困惑。

更新

你正在混合它。如果工作表名称为“按月生产使用情况”,则而不是“按月产生使用量”.Range(“A6:F94”)) 使用“按月产生使用量!A6:F94”

提示;在 Excel 中记录一个宏以查看语法的工作原理。

关于c# - 为什么我的数据透视表字段名称被视为无效和/或我的数据被视为未组织为带有标签列的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38060239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com