gpt4 book ai didi

c# - 在 C# 中更改 Excel 电子表格的 PivotCache 连接

转载 作者:太空宇宙 更新时间:2023-11-03 14:06:52 25 4
gpt4 key购买 nike

我正在使用 C# 将一个包含数据透视表和图表的 Excel 电子表格加载到网络浏览器控件中。电子表格有几个连接字符串都指向一个开发数据库。我希望能够将连接字符串更改为用户在我的应用程序运行时提供的字符串。

当以编程方式创建电子表格并且数据透视缓存的 SourceType 设置为“外部”时,我已经设法让它工作。但是,当加载在 Excel 中创建的电子表格时,源类型设置为“数据库”,并且在访问“连接”属性时会抛出异常。

有没有办法更改此类电子表格的 SourceType(只读)属性或连接字符串?

这是我的代码示例,它基于 a solution to a similar problem .

EXCEL.Worksheet sheet = (EXCEL.Worksheet)_application.ActiveSheet;
foreach (EXCEL.PivotTable table in sheet.PivotTables())
{
table.PivotCache().Connection = ConnectionString;
table.RefreshTable();
}

这个我也试过

var workBooks = _application.Workbooks.Cast<EXCEL.Workbook>();
var pivotCaches = workBooks.SelectMany(arg => GetPivotCaches(arg));

foreach (EXCEL.PivotCache cache in pivotCaches)
{
cache.Connection = ConnectionString;
}

在这两种情况下,只要我访问数据透视缓存的 Connection 属性,我就会收到 System.Runtime.InteropServices.COMException。有什么想法吗?

最佳答案

这是基于 I found here 的解决方案解决问题的方法.

        //update the connections
foreach (EXCEL.WorkbookConnection connection in workbook.Connections)
{
if (connection.Type.ToString() == "xlConnectionTypeODBC")
{
connection.ODBCConnection.BackgroundQuery = false;
connection.ODBCConnection.Connection = ConnectionString;
}
else
{
connection.OLEDBConnection.BackgroundQuery = false;
connection.OLEDBConnection.Connection = ConnectionString;
}
}

//Refresh all data
workbook.RefreshAll();

这解决了大多数报告抛出异常的问题。唯一没有用的是从头开始重新创建的(它真的很旧而且一直在附近!)

希望这对其他人有帮助。

关于c# - 在 C# 中更改 Excel 电子表格的 PivotCache 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9099184/

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