4

我的任务是为 Excel 2007 创建一个从自定义数据源读取数据的插件。我已经有了读取数据的代码。它是用 C# 编写的并返回对象。这是针对银行系统的,我无法直接访问数据。必须向 C# DLL 提供用户 ID、密码和硬件生成的密钥以获取最新数据。

我的老板希望数据每分钟自动更新一次,或者使用 Excel 提供的刷新功能手动更新。所以我需要让数据出现在 Excel 中,就好像它来自标准数据库连接一样。

我环顾四周寻找一个起点,但我正在努力寻找一些有助于满足这一非常具体要求的信息。任何人都可以帮忙吗?

4

3 回答 3

2

首先下载VSTO(Visual Studio Tools for Office),这将允许您创建 C# Excel 加载项。

在 Visual Studio 中,当您创建一个新项目时,您将看到 Office,并且您将能够从中选择 Excel。

从那里开始,一旦你这样做了,你就可以回来问更具体的问题。

一些使用 Excel 的有用技巧。

要选择活动工作表:

Excel.Worksheet sheet = this.Application.ActiveSheet as Excel.Worksheet;

要选择特定范围(在本例中为 A1 - B5):

Excel.Range range = sheet.get_Range("A1", "B5") as Excel.Range;

要将值设置为整个范围:

 range.Value2 = 2; //will set every cell in A1 through B5 to 2

您可以从二维数组中的范围获取值,例如:

object[,] values = range.Value2 as object[,];
//this will return an multidimensional array representing rows and cols
//as you see in the range. in this case the array is filed with "2"

然后,您可以更改整个数组中的值并应用回范围:

   values[2, 2] = 4;  //will change the value to 4 in row 2, col 2 of the *range*
   range.Value2 = values; //set back the whole range to the array

您可以使用此技术一次更新整个范围,方法是先准备一个数组,然后将其设置为范围值。

从范围内的特定单元格中获取值(设置值的方式相同,但相反)。

Excel.Range cell = range.Cells[1,1] as Excel.Range; //this will take the cell from row 1, cell 1. if you used array this would be values[1,1]
string value = (cell.Value2 ?? "").ToString();

这应该允许您在 Excel 中执行基本任务,您可以设置值和获取值以及选择范围。一旦你有更具体的问题,请回来。

不要忘记,来自 Excel 的数组是从 1 开始的,而不是从零开始的!!!

于 2010-02-22T16:18:46.237 回答
0

您可以尝试使用XLLoop。这允许您在服务器上创建各种语言的 Excel 函数 (UDF)。因此,您可以编写返回数据的函数 - 用户将使用 Shift-F9 进行刷新。

这里有一个基本的 C# 服务器实现: http ://winrun4j.cvs.sourceforge.net/viewvc/winrun4j/org.boris.xlloop/servers/csharp/

顺便说一句,我从事该项目,所以如果您有任何问题,请告诉我。

于 2010-03-12T02:07:44.907 回答
0

要自动更新,您需要创建一个实现 Excel RealTimeData (RTD) COM API 的 DLL。请参阅https://support.microsoft.com/en-us/kb/285339

由于您想在 C# 中执行此操作,因此 Excel DNA ( https://exceldna.codeplex.com/ ) 是最容易开始的地方,它将为您完成大部分工作。

于 2015-05-10T19:05:12.910 回答