如何创build读取自定义数据的Excel加载项?

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

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

我已经四处寻找一个起点,但我正在努力寻找一些信息,这将有助于这个非常具体的要求。 谁能帮忙?

从下载VSTO(Visual Studio Tools for Office)开始,这将允许您创build一个C#Excel加载项。

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

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

使用Excel的一些有用的提示。

要select活动表格:

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

select一个特定的范围(在这种情况下,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 

您可以从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中执行基本任务,您可以设置值并获取值并select范围。 一旦你有更具体的问题,请回来。

别忘了,来自Excel的数组是基于1而不是零的!

你可以尝试使用XLLoop 。 这使您可以在服务器上以各种语言创buildExcel函数(UDF)。 所以你可以编写返回数据的函数 – 用户将使用Shift-F9刷新。

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

顺便说一句,我在这个项目上工作,所以让我知道你是否有任何问题。

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

既然你想用C#来做,Excel DNA( https://exceldna.codeplex.com/ )是最简单的开始,它将为你完成大部分的工作。