我一直在使用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
任何解决方案?
答案 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代码。