用后期绑定创build和填充Excel工作表

我一直在使用Visual C#.NET来查看Office自动化服务器的Microsoft支持页面绑定,尝试创buildExcel工作表,使用数据表中的值填充它,并将其保存到计算机中。

我有一个使用早期绑定,并简单地循环通过项目的实现,但我不知道你如何实现这与后期绑定,我需要能够embeddedInteroptypes,使应用程序版本独立于关于MS Office。

如何使用迟绑定将数据表中的行添加到新的Excel工作表中?

我会build议编写一个接口和抽象的数据填充步骤,和Excel的步骤。 这样,你可以有一个系统,实现与Excel的早期绑定做的事情,然后一个引擎,使用此接口来填充Excel工作表。 第二步是使用Late Binding而不是早期绑定来编写接口的第二个实现。 那么当你创build接口的时候,你只需要在你的代码中replace第二个实现。

在代码中,只能创build1个对象,即接口本身。 当创build它时,您可以将其分配为任何实现该接口的其他类/实现…以下是我自己的代码示例:

ISpreadsheetControl SSInterface; if (conditionCheck()) SSInterface = new ExcelImplementer(); else SSInterface = new OpenOfficeImplementer(); 

我只使用1对象,SSInterface,当放置数据或更改页面设置等等等等…我实现的任何其他…但它可以以两种不同的方式来实现,这些方式基于我在负载时分配给接口的类时间。

关于“如何”的具体细节…我发现你提供的链接中的第二个例子确实非常有用。 关于Type和Invoke的全部内容。 困难将会跟踪你在任何时候的工作。 这是使其更难以合作的事情之一,也是首先提取早期约束实施的一个很好的理由。 这样你可以在写第二个时看到所有需要的方法名和参数列表。

我还想补充一点:对于你的问题,非常简单和简短的回答是“完全按照你已经存在的方式去做”。你只需要改变'你怎样调用填充数据的方法'其余的优秀interop实施与它一起。

UPDATE

我认为这可能会做你正在寻找的东西,虽然它的杂乱程度,我build议把它(两个操作,实际上,可以调用另一个)到自己的方法,在某个地方。

 //Get a range object that contains the cell. Parameters = new Object[2]; Parameters[0] = iRow + 1; Parameters[1] = iCol; objRange_Late = objSheet_Late.GetType().InvokeMember( "Cells", BindingFlags.GetProperty, null, objSheet_Late, Parameters ); //Write value in cell Parameters = new Object[1]; Parameters[0] = row[col.ColumnName]; objRange_Late.GetType().InvokeMember( "Value", BindingFlags.SetProperty, null, objRange_Late, Parameters ); 

我不得不承认,我现在还没有一个可以testing的实现,但根据我所知道的情况,这应该是可行的。 如果“单元格”不起作用,我也将与“范围”相同的代码…我真的不知道如果这一个采取数字input与否。

链接到单元格属性描述(msdn)

你可能还想探索整个系统,它可以帮助你find你可能要找的一些东西。

testing托pipe成功创build和testing上述代码,它完美的工作。