【问题标题】:Excel Template Bulk Printing C# Windows ApplicationExcel 模板批量打印 C# Windows 应用程序
【发布时间】:2012-10-01 18:33:44
【问题描述】:

我一直在用 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

有什么解决办法吗?

【问题讨论】:

  • 你想要什么而不是空格?是否要缩小打印区域、保留默认值、输入新的默认值或提示用户输入值?这个问题的答案将决定在何处以及如何实施该解决方案。
  • 我只是想要,打印中不应该看到空白区域。问题是空单元格打印为空白空间,因此例如 AddressLine2 不在 Db 中。那么它将如下所示。 AddressLine1 AddressLin3 我想要像 AddressLine1 AddressLine3 这样的输出

标签: c# windows excel printing


【解决方案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 代码。

【讨论】:

  • 我正在替换 excel 中的值,我该如何为 excel 执行此操作?问题是当值为空白时,它会被写入 excel 单元格,当我在 C# 中打印该 excel 时,它会在那里显示空白区域
  • 见上面 Pynner 的评论。我假设您的 SQL 选择语句输出到电子表格行。如果数据库中的一列是 NULL,那么我的建议可以用来填补空白。所以你会使用 ISNULL(column_Name, 'missingValue')。当 column_name 为 NULL 时,返回 'missingValue' 而不是空白。
  • 我只是想要,打印中不应该看到空白区域。问题是空单元格打印为空白空间,因此例如 AddressLine2 不在 Db 中。那么它将如下所示。 AddressLine1 AddressLin3 我想要像 AddressLine1 AddressLine3 这样的输出
猜你喜欢
  • 2015-11-08
  • 1970-01-01
  • 2011-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-22
相关资源
最近更新 更多