首页 文章

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

提问于
浏览
2

我一直在寻找微软支持页面Binding for Office automation servers with Visual C# .NET来尝试创建一个Excel工作表,用数据表中的值填充它,并将其保存到机器上 .

我有一个使用早期绑定的实现,只是循环遍历项目,但我不知道如何通过后期绑定实现这一点,我需要能够嵌入Interop类型以使应用程序版本独立于关于MS Office .

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

1 回答

  • 1

    我建议编写一个接口并抽象数据填充步骤和excel步骤 . 这样你就可以拥有一个系统来实现与excel的早期绑定来做事,然后是一个使用这个界面来填充excel表的引擎 . 第2步是使用Late Binding而不是早期绑定来编写接口的第二个实现 . 然后,在创建接口时,只需将第二个实现替换为代码中的第一个实现 .

    在代码中,您只需创建一个对象,即接口本身 . 在创建它时,您可以将其指定为实现该接口的任何其他类/实现...这是我自己的代码中的示例:

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

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

    关于“如何”的细节和细节...我发现你提供的链接中的第二个例子确实非常有用 . 它全部与Type和Invoke有关 . 困难在于在任何特定时间跟踪您正在使用的内容 . 这是使其更难处理的事情之一,并且是首先提取早期绑定实现的一个很好的理由 . 这样,您可以在编写第二个时看到所需的所有方法名称及其参数列表 .

    我还想补充一点:对你的问题非常简单和简短的回答是“你做的完全一样”你只是改变你如何调用填充数据的方法......以及所有的其余的excel互操作实现 .

    UPDATE

    我认为这可能会做你正在寻找的东西,虽然它太乱了,我建议把它(实际上两个操作,一个可以调用另一个)放到它自己独立的方法中,某处 .

    //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 );
    

    我不得不承认,我现在没有可以测试它的实现,但根据我所知道的事情,这应该有用 . 如果“单元格”不起作用,我也会使用“Range”相同的代码......我实际上并不知道是否需要数字输入 .

    link to Cells property description (msdn)

    您可能还想稍微探索整个系统,它可以帮助您找到您可能正在寻找的一些东西 .

    Tested 管理成功创建并测试上述代码,它完美运行 .

相关问题