Excel模板批量打印C#Windows应用程序

时间:2012-10-01 18:33:45

标签: c# windows excel printing

我一直在使用C#开发Windows应用程序。我的要求是打印预定义的Excel模板,其中包含给定订单号的数据库值。意思是,我必须从数据库(SQL Server)检索数据并用数据库值替换预定义的单元格值(文本)(在Excel模板中)。例如 -

在Excel单元格值中,“SENDER_NAME”将替换为“FEDEX”,“OrderNo”将替换为“1212”,依此类推。我正在使用以下代码来做到这一点。

object missingValue = Type.Missing;

xlWorkBook = xlApp.Workbooks.Open(path, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);

xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

xlWorkSheet.Cells.Replace("SENDER_NAME", "FEDEX", missingValue, missingValue, missingValue, missingValue, missingValue, missingValue);

我的问题是 - 当数据库中的某些值不存在于excel中的给定单元格文本时,它将替换为空白值,因此在打印时会留空空格。 我必须减少那些空位?

我只是想要,在打印中不应该看到空白区域。问题是空单元格正在打印为空白区域,因此例如AddressLine2不在Db中。然后它会像下面一样。

AddressLine1
EMPTYCELL
AddressLin3

我希望输出像

AddressLine1
AddressLine3

任何解决方案?

1 个答案:

答案 0 :(得分:1)

您可以在SQL语句中使用ISNULL(表达式或列,替换值)来清除电子表格中的NULL值。替换值将是''。见http://msdn.microsoft.com/en-us/library/ms184325.aspx

编辑答案:

然后我建议你在SQL中构建一个分隔的字符串并在Excel中打开它。不要使用逗号作为分隔符 - 使用分号或制表符,如以下示例所示:

分号分隔

SELECT 
CompanyName + ';' + 
Address1 + ';' + 
ISNULL(address2 + ';', '')+
State AS out_string  FROM customers

制表符分隔

SELECT 
CompanyName + char(9) + 
Address1 + char(9) + 
ISNULL(address2 + char(9), '') +
State AS out_string  FROM customers

通过连接ISNULL函数调用中的分隔符,可以在遇到空值时阻止背靠背分隔符。在允许使用NULL值的所有列上使用ISNULL代码。