我目前正在使用几种方法(表值函数)在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对象作为参数发送显然不起作用。或者可以吗?
答案 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集成相关的代码。