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

Excel模板批量打印C#Windows应用程序,c#,windows,excel,printing,C#,Windows,Excel,Printing,我一直在用C#开发一个Windows应用程序。我的要求是打印一个预定义的Excel模板,其中包含给定订单号的数据库值。意味着,我必须从数据库(SQL Server)检索数据,并用数据库值替换预定义的单元格值(文本)(在excel模板中)。比如说- 在Excel单元格中,值“发件人名称”将替换为“联邦快递”,“订单号”将替换为“1212”,依此类推。我使用下面的代码来实现这一点 object missingValue = Type.Missing; xlWorkBook = xlApp.Work

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

在Excel单元格中,值“发件人名称”将替换为“联邦快递”,“订单号”将替换为“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
有解决办法吗

您可以在SQL语句中使用ISNULL(表达式或列,替换值)来去除电子表格中的NULL值。替换值将为“”。看

编辑答案:

然后我建议您在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
制表符分隔

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代码。

我正在替换excel中的值,如何在excel中执行此操作?问题是当值为空时,它会被写入excel单元格,当我用C#打印excel时,它会显示空白,请参见上面的Pynner评论。我假设您的SQL select语句被输出到电子表格行。如果数据库中的一列为NULL,则可以使用我的建议来填充空白。所以您将使用ISNULL(列名称'missingValue')。当列_name为NULL时,将返回'missingValue'而不是空白。我只是想,打印时不应看到该空白。问题是空单元格打印为空白,所以例如AddressLine2不在Db中。然后它会像下面这样。AddressLine1 AddressLin3我想要像AddressLine1 AddressLine3这样的输出您想要什么而不是空的空格?是否要缩小打印区域、保留默认值、输入新的默认值或提示用户输入值?这个问题的答案将决定在何处以及如何实施解决方案。我只是想,打印时不应看到空白。问题是空单元格打印为空白,所以例如AddressLine2不在Db中。然后它会像下面这样。AddressLine1 AddressLin3我想要类似AddressLine1 AddressLine3的输出