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

标签 c# .net excel excel-addins vba

我目前正在用 C# 开发一个 excel 插件,其中包含几种方法(表值函数),可供 excel 用户和程序员 (VBA) 使用。

如何编写一个方法,将新的 ListObject(excel 表)添加到给定的 excel 工作表,并将给定的 DataTable 绑定(bind)为数据源?类似于以下内容:

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 对象作为参数发送的方法显然行不通。或者可以吗?

最佳答案

经过一些研究,我找到了问题的答案,即如何在 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 集成的相关代码。

关于c# - 如何将 excel ListObject 添加到 C# 中的给定工作表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25460922/

相关文章:

c# - 枚举不序列化

c# - 使用 Action.Invoke 是否被认为是最佳实践?

c# - Entity Framework - 如何从联结表中删除数据

c# - [ASP.net]MVC 在我的 Controller 之前做什么?

excel - 在 Excel VBA 用户窗体中显示 PDF

VBA - 选择单选按钮时触发宏

c# - 应用程序设置和 settings.settings 和 configurationmanagers.appsettings 哦,我的

c# - 在 C# 2.0 中使用 Invoke 调用时,参数从 null 转换为 DateTime.MinValue

c# - 文本框和标签之间的一致空间和对齐方式

Python将数据框切片为多个Excel文件