【问题标题】:Excel 2010 - Change data source of pivot table from external to worksheet within workbookExcel 2010 - 将数据透视表的数据源从外部更改为工作簿内的工作表
【发布时间】:2014-03-10 18:09:44
【问题描述】:
我一直遇到使用外部 .csv 文件作为其源的数据透视表的问题,尤其是 csv 文件中的日期被视为文本时。因此,我决定将 csv 文件导入另一个工作表,然后通过重新格式化相关列来强制日期被识别。
我现在遇到的问题是更改现有数据透视表以使用新工作表中的数据而不是外部源。如果我单击“更改数据源”按钮,“选择表格或范围”选项将显示为灰色。如果我继续使用外部数据源并单击“选择连接”按钮并选择新工作表,则会弹出“所选连接类型不能用于创建数据透视表”的弹出窗口。
我也尝试将 csv 文件转换为 xlsx,但在尝试让现有数据透视表使用它而不是 csv 作为其源时遇到了类似的问题。
【问题讨论】:
标签:
excel
date
csv
connection
pivot
【解决方案1】:
你问已经有一段时间了,但我遇到了同样的问题,刚刚找到了一个解决方案。
基本上,您可以使用 VBA 将数据透视表更改为新的数据透视缓存。如果新缓存使用相同的字段,那么您的布局将被保留。
- 根据新数据源创建新数据透视表(可以为空)。
- 点击新的枢轴。
- 在即时窗口中输入“? selection.pivottable.cacheindex”并按回车键。
- 注意数据透视缓存的索引号。
- 在 Excel 中单击要更改的旧数据透视表。
- 在即时窗口中键入“selection.pivottable.cacheindex = x”,其中 x 是您在第 4 步中记下的索引号。
- 对要使用新源的每个数据透视表重复第 6 步。
- 删除您在第 1 步中创建的表。
可能会在一个步骤中将所有表从一个缓存更改为另一个,但这可能不是您需要经常做的事情。
【解决方案2】:
是的,这对数据透视表来说是一个烦人的约束。
重新创建并将数据源从 .csv 文件更改为 .xls 文件的步骤:
- 创建了一个 .csv 文件,其中包含标题名称、出生日期、签名。关闭文件。
- 将 .csv 文件导入新工作簿中的新数据透视表 PivotTable1。
- 将原始 .csv 文件保存到新工作簿 c:\path\to\datasource.xls 中,将工作表命名为 Data 并确保数据范围的左上角单元格位于单元格 A1 中。
然后我添加了以下 VBA 宏并执行它:
Sub getExcelData()
With ActiveSheet.PivotTables("PivotTable1").PivotCache
.Connection = Array( _
Array("ODBC;DSN=Excel Files;"), _
Array("DBQ=c:\path\to\datasource.xls;"), _
Array("DefaultDir=c:\path\to;DriverId=790;MaxBufferSize=2048;PageTimeout=5;") _
)
.CommandText = _
"SELECT `Data$`.Birthdate, `Data$`.Name, `Data$`.Sign" & vbCrLf & _
"FROM `c:\path\to\datasource.xls`.`Data$` `Data$`"
End With
End Sub
此驱动程序的 .CommandText 语法非常挑剔,一点也不聪明。
在 2010 年或更高版本中使用此代码和/或使用不同驱动程序的 YMMV。众所周知,即使在更高版本的 Excel 数据驱动程序中,日期和数字数据也处理不当。在导入之前,我通常会确保数字或日期字段中的每个单元格都有一个有效值,或者至少第一行数据中的每个单元格都有一个有效值。
【解决方案3】:
这会有所帮助,但是对于那些不知道即时窗口在哪里的人,您需要转到开发人员选项卡并进入 Visual Basic 宏窗口并按 Ctrl+G,它将在底部打开即时窗口。最初由 mendosi 回答您问已经有一段时间了,但是我遇到了同样的问题,并且刚刚找到了解决方案。基本上,您可以使用 VBA 将数据透视表更改为新的数据透视缓存。如果新缓存使用相同的字段,那么您的布局将被保留。
根据新数据源创建一个新的数据透视表(它可以为空)。
单击新的枢轴。
在即时窗口中输入“? selection.pivottable.cacheindex”,然后按 Enter。
注意数据透视缓存的索引号。
在 Excel 中单击要更改的旧数据透视表。
在即时窗口中键入“selection.pivottable.cacheindex = x”,其中 x 是您在步骤 4 中记下的索引号。
对要使用新源的每个数据透视表重复步骤 6。
删除您在步骤 1 中创建的表。
可以在一个步骤中将所有表从一个缓存更改为另一个,但这可能不是您需要经常做的事情。
【解决方案4】:
由于我是新成员,我无法添加评论或添加投票。
无论如何,因为我有同样的问题,所以我找到了这个页面,
对我来说,Ines 的答案是正确的,也是最简单的。
Excel 2010:
- 自定义功能区....
- 不在功能区中的命令...
- 数据透视表和数据透视图向导...
- 将数字 3 添加为新菜单(我在 INSERT 选项卡中选择作为新菜单)
- 单击需要将哪个数据源从外部连接更改为活动工作表中的区域或表格的数据透视表。
- 点击3号菜单
- 点击“返回”两次
- 选择 Microsoft Excel 列表或数据库单选按钮
- 点击“下一步”,然后在范围框中填写范围或命名范围
- 点击完成
我终于可以将它从外部数据更改为范围
非常感谢你,伊内斯。
(不知道为什么有人反对你)。