如何在C#中将excel ListObject添加到给定的工作表?

时间:2014-08-23 10:24:21

标签: c# .net excel excel-vba excel-addins vba

我目前正在使用几种方法(表值函数)在C#中开发一个excel加载项,这些方法可供excel用户和程序员(VBA)使用。

如何编写一个方法,将新的ListObject(excel表)添加到给定的Excel工作表中,并将给定的DataTable绑定为数据源?如下所示:

using Excel = Microsoft.Office.Interop.Excel;
...
[ClassInterface(ClassInterfaceType.AutoDual)]
public class TableFunctions {
...

public Excel.ListObject CreateListObject(Excel.Worksheet ws, string TableName, DataTable dt, string CellStr = "A1")
{
...
}

这种方法,将Worksheet对象作为参数发送显然不起作用。或者可以吗?

1 个答案:

答案 0 :(得分:4)

经过一些研究后,我找到了一个问题的答案,如何在C#中以编程方式将ListObject(excel表)添加到工作表中:

public Excel.ListObject WriteToExcelTable(Excel.Worksheet WSheet, string TableName, string CellStr = "A1", bool ClearSheetContent = false)
{
    Excel.Range range;

    if (ClearSheetContent)
        WSheet.Cells.ClearContents();  // clear sheet content

    // get upper left corner of range defined by CellStr
    range = (Excel.Range)WSheet.get_Range(CellStr).Cells[1, 1];   //

    // Write table to range
    HelperFunc.WriteTableToExcelSheet(WSheet, this._tbl, range.Address);

    // derive range for table, +1 row for table header
    range = range.get_Resize(this.RowCount + 1, this.ColumnCount);

    // add ListObject to sheet

    // ListObjects.AddEx Method 
    // http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.listobjects.addex%28v=office.14%29.aspx

    Excel.ListObject tbl = (Excel.ListObject)WSheet.ListObjects.AddEx(
        SourceType: Excel.XlListObjectSourceType.xlSrcRange,
        Source: range,
        XlListObjectHasHeaders: Excel.XlYesNoGuess.xlYes);

    // set name of excel table
    tbl.Name = TableName;

    // return excel table (ListObject)
    return (Excel.ListObject)tbl;
}

请参阅my article有关此内容以及其他与excel和.net集成相关的代码。