SpreadsheetGear CopyFromDataTable单元格格式

我试图使用SpreadsheetGear将数据从DataTable导出到Excel文件中。 Excel文件中的工作表将从具有列标题和特定格式的模板中复制。 为了便于维护(更改存储的proc和模板以更改报表内容,而不是重新部署服务),我不想在代码中执行某些列格式设置,即列填充颜色。

我使用SpreadsheetGear的CopyFromDataTable进行导出。 但是,InsertCells标志不会导致数据采用其插入的行的格式(列填充颜色),如描述注释(“这允许单元格被预先格式化”)。

我正在通过不使用InsertCells标志来解决这个问题,而只是在模板中的整个列上设置列填充颜色。 但是,这会导致整列被着色,包括超出使用的范围。 我想限制格式化到使用的范围。

有没有办法清除UsedRange 之外的任何格式? 正如我正在写这个,我意识到这种方法是错综复杂的。 但格式化是强制性的,我想简化维护只需要存储过程更改和模板更改。 我愿意接受任何其他的方法来促进这一点。

SetDataFlags .InserCells枚举选项应该允许在只填充DataTable的范围内select格式。 但是,正如文档中所述,确实要求使其正常工作:

“当指定这个标志[InsertCells]时,如果没有指定SpreadsheetGear.Data.SetDataFlags.NoColumnHeaders,则必须为数据提供一个正好两行的范围,在列标题前面加一行。

“两行数据”应格式化,但您需要(内部/填充颜色等)。 SpreadsheetGear附带的Explorer示例解决scheme(位于开始菜单/屏幕的SpreadsheetGear文件夹中)包含一个示例,演示了Reporting> DataSet to Workbook

UPDATE

下面是一个演示如何结合使用InsertCells标志和NoColumnHeaders的例子。 此代码假定您已经有一个worksheet设置与格式化的范围,并且您可以获得一个DataTable的大小对应于您的格式化的范围中的列数。

 using SpreadsheetGear; using SpreadsheetGear.Data; // Generate DataTable. For this example, let's say it is 5 columns wide and // 10 rows deep... DataTable dataTable = // ...get DataTable... // We're not interested in a "Column Header" row, so for the above dataTable, // an IRange 5 columns wide and 2 rows deep needs to be specified where those // two rows are already setup with the desired formatting. In this case B2:F3 // are formatted accordingly. worksheet.Cells["B2:F3"].CopyFromDataTable(dataTable, SetDataFlags.InsertCells | SetDataFlags.NoColumnHeaders); // Sheet should how have B2:F11 populated with your dataTable data, with all // rows having picked up the formatting as originally specified in B2:F3 

我有两个build议

1)不是很优雅,但是您可以在Excel模板中使用条件格式来获得期望填充电子表格的最大行数。 如果单元格不为空,或者同一行中的某个其他参考单元格符合定义的条件,则应能够打开所需的格式。

2)使用Datatable.Rows.Count来计算您的C#数据表中的行数,然后从该信息构造一个Excel单元格范围定义。 粘贴到表格后,将所需的格式应用到目标单元格区域(对不起,代码示例没有时间)。