本来这一篇要放到很后面去写,不过论坛里有人问到,就提前了。

很多人说水晶报表导出的Excel太难看,或者导出的Excel根本没法用,其实水晶报表是可以完整导出到Excel的
当然,水晶报表与其他基于CELL的报表工具相比,对Excel的支持是很弱的。而所谓的完美,是相对的。
我抓了大量的操作图来进行解说,或许大家会体会到为什么我会说水晶报表是一个操作性很强的工具的原因了。

一般我们画格线的时候,导出的Excel要么是乱的,要么是没格线。
有的朋友说我导出的时候选“ 显示网格线”就可以啊。

但是:
1: Web项目导出时没这个项目,只在Winform下有
2:用户是不会愿意去做这个事情的

下面的方法,是基于字段的边框来实现的,不是线条和框。本篇的目标是实现将报表导出到Excel后,显示成这样一个效果

第一步:基本操作方法

准备一个空的报表

把几个字段拖上去

为了便于精细操作,我们把模板放大一点。
视图-缩放,选一个150%

这样我们的模板就放大了, 注意字段和字段之间是有间隙的(当然,不用放大也看得到,呵呵)

大家注意点这个图上有很多小点,这个就是报表的操作精度。
为了精细操作,设置这个精度小一点

进入如下菜单项目,

设置最小单位为0.1,当然还能再小,不过太小了反而操作起来更困难

然后我们再看,那个小点之间的间距明显变小了

保持第1个字段不动,点第2个,平行左移,不要太用力,很容易就拉到前一个字段的右边沿了。
做多了,就会有手感。一拉就行了。表头上的文本也会跟着动

依次操作完后,效果是这样的,注意,两个字段之间的间隙已经没有了

下面简单讲解一下一些简单的操作机器
横线字段的对齐,选中要对齐的字段(可以划拉一下选中,或者是Ctrl选),在其中一个上点右键,可以设置对齐方式和大小比例

纵向字段操作也是类似

好了完成了第一步。

第二步:加格线
选中表头上的所有字段,在其中一个上点右键,格式化多个对象

在出来的界面上,切换到模板标签页,设置边框线。为了方便描述,我就简称为: 上下右
也就是上边下边和右边框有边线。

出来的效果如下,左边第一个字段有个小缺口

,补一下。
在第一个字段上点右键,格式化对象,在边框标签页上,设置左边框为单线,其余不要动.
然后选中 详细资料节上的字段,设置边线为:下右(下边沿和右边沿单线),
再把第一个字段补一个左边沿单线,出来如下效果。

大功告成,预览一下

导出来看看,注意选第一个XLS格式

如果出来这个界面,不要管,点确定然后继续

看一下效果吧

看这效果我来具体说一下原理。
竖线的部分我就不讲了,单独讲讲横线的为什么这么设。

我们知道页眉是每页固定的,每页只出现一次因为我们设置了上下边框都是横线。那么他的下边沿就是显示为一条横线,仅贴在页眉的下边沿。
而我们在设置详细资料节的时候,设置了下边沿。因为详细资料节是循环的,于是每行的下边沿又刚好是下一行的上边沿。
只有第一条记录上边沿是没有的,而刚好页眉下边沿的线就成为这条记录的上边沿。
所以整个数据就闭合起来了。

第三步:稍微完善一下

左边空出来一列?再改进一下吧。
进入模板,把所有的字段全选中,然后平行往左拖,拖到最左边为止。
实际上不是绝对的左边,还是有个小缝隙的,不过没关系,只要不能再拖了就行

继续向着我们的目标(第一个图迈进)
选中表头上的所有字段,点右键,格式化多个对象,进入边框标签页
下面的颜色处,勾选“背景”,我们选个银色,然后确定

界面是这样的,线条没了。这样操作,从第2个字段开始,在字段上点右键,移动,移动到底层

设置好了就是这个模板效果

然后再预览一下(为了便于显示,我稍微改了下一些字段的样式)

导出来,效果就是我们要的

补充说明:
1:不适用于“自动换行”需求的报表
2:在Web项目中可能会出现边框不显示的情况,这是VS2005里版本的BUG,这样修正
HTML模式下,删除aspx页面内的

HTML code
    
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

3:如果发现详细资料节上有隐藏的空行,那应该是你的字段没有顶到详细资料节的上下边沿
把字段往上拖,顶到详细资料节上边沿。鼠标滑到详细资料节的下边沿,会出现红色形状的那个标记
实际上不是红的,这个是我画上去的。。按下去,往上拖,然后下边沿就往上走了。顶到字段的下边沿即可

4: 特别说明一下数据如果分页的话,要把表头放在页眉上。不然导出的文件里页眉会重复。实际上放到页眉上也可以(某些情况可能确实需要放到页眉上),这个时候导出的时候用代码控制一下
基本原理如下:
报表页眉上方一个同样的表头,抑制显示掉。页眉上放一个表头,正常显示。页面展示和打印时,按原样打印。
而导出时,控制模板的报表页眉显示,页眉抑制显示,然后用代码导出,从而实现导出效果。
5:NULL值的处理
如果数据中存在NULL值,那么导出和显示的时候,边线都就没有了。
报表中户多了很多不规则的“窟窿”。
这个时候有两种解决方法,一是传入报表之前,把数据处理成非NULL值,二是在报表端处理
针对有NULL的字段,做一个公式,如xx,把报表里的原始字段删掉,把这个xx拖到原来的位置,设置大小位置边线,跟原始字段的设置一样
公式xx这样写:

C# code
    
//如果是字符型的字段 if {字段}='' or isnull(字段) then ' ' else {字段}

C# code
    
如果是数值型字段 if (not isnumeric({字段})) or isnull(字段) then 0 else {字段}

其他数据类型以此类推。
就是要在字段等于null的的情况下,给一个空格(而不是空)进行占位,如果非NULL就显示原来的值。
有时候会出现无效的情况,就把isnull判定放到前面

if {字段}='' or isnull(字段)  then
改为
if  isnull(字段) or {字段}='' then

【 非常感谢llsen的提醒,另外还纠正了我不少笔误。】

这是完整的一篇,可以独立成文。
下篇主要是讲解横向和纵向上的单元格合并,也就是这个效果。

【请尊重本人之劳动,转载请注明出处。讨论请至置顶的讨论帖,谢谢】

【水晶报表内功心法】--完美Excel(上)相关推荐

  1. 【水晶报表内功心法】--完美Excel(下)

    前文<[水晶报表内功心法]--完美Excel(上)>中, 主要讲解了如何做一个基础的到处样式, 本文在上文的基础上,实现类Excel的一个操作,就是单元格横向和纵向合并.以及加底色的效果, ...

  2. 关于CrystalReportsy 9(水晶报表9)在VS2017上的使用

    关于CrystalReportsy 9(水晶报表9)在VS2017上的使用 1.加载CrystalReportsy 9 首先需要加载CrystalReportsy 9的插件.1.打开VS2017-&g ...

  3. 【水晶报表内功心法】--PUSH模式样板招式

    索引 .[水晶报表内功心法]--序言 .[水晶报表内功心法]--推拉之间 .[水晶报表内功心法]--PULL模式样板招式 ======================================= ...

  4. 水晶报表如何完美导出一个Excel表格

    现有报表项目中,一般有把报表导出成Excel的要求 而对于水晶报表来说,虽然带了导出Excel的功能,但是能导出一个能用的excel表格却不容易 因为很容易就会出现跨行跨列的情况,默认导出是没有格线的 ...

  5. 水晶报表导出到Excel

    水晶报表自带的导出Excel不太完美,导出的文件没有网格线,要使它出现网格线就要自己写导出方法.要注意的一点是只有用强类型的水晶报表才可以写自定义的导出方法(个人意见).方法步骤: 1,  创建个数据 ...

  6. vs2003水晶报表导出到excel报错的解决方案

    异常详细信息: CrystalDecisions.CrystalReports.Engine.ExportException: 文件 C:\WINDOWS\TEMP\temp_9b1e8b43-553 ...

  7. 水晶报表--完美excel(上)

    很多人说水晶报表导出的Excel太难看,或者导出的Excel根本没法用,其实水晶报表是可以完整导出到Excel的 当然,水晶报表与其他基于CELL的报表工具相比,对Excel的支持是很弱的.而所谓的完 ...

  8. 水晶报表常见问题整理之一(20050417)

    Q1:如何控制水晶报表在WEB页面上显示的大小?  1:水晶报表显示的大小不是以你内容的多少而是以报表纸型的大小为准的  所以你首先应该设置一个大小合适的纸型  http://www.cnblogs. ...

  9. 水晶报表导出Excel多出空白页不完全解决方案

    在用水晶报表过程中,遇到凭空多出的白页,在CSDN上查找,也发现两个帖子在问这个 问题,但没有得到合适的答案.于是自己摸索着,也找到一条方法,但感觉不是最完美 的,希望有精通于此道的朋友赐教,多谢. ...

最新文章

  1. 2021高校毕业生薪酬Top100出炉!清华指数TOP,薪酬却排名第二
  2. char值序列是什么Java_CharSequence和java之间的确切区别
  3. FD.io VPP:CentOS7下构建自己的VPP RPM包
  4. Kubernetes学习总结(16)—— Kubernetes 实战之部署 Redis 集群
  5. ★LeetCode(175)——组合两个表(MySQL)
  6. 最积阴德的4件事,哪怕做过一件,也会累积大功德!
  7. shell 命令返回值判断
  8. python进阶方向_python进阶—边练边学,学到极致
  9. Spss-kmeans聚类分析操作
  10. 解决linux kernel 提交gerrit时,运行checkpatch.pl产生的xxxx64_defconfig not generated by savedefconfig问题
  11. 错误:Error:java.lang.RuntimeException: Some file crunching failed, see logs for details解决方案
  12. 763-GMAX3809 1.1” 900万分辨率全局快门CMOS图像传感器
  13. 你的伙伴对你最大会话_经典对话台词友情
  14. PHP之父Rasmus Lerdorf演讲:激情下的PHP 百作坊
  15. 印刷机在纸厚发生变化时的压力调节
  16. uni-app仿饿了么点餐界面 左右菜单联动 滚动时商家信息、广告吸顶、弹窗下滑动关闭
  17. python基本库six_Python-six库的导入问题
  18. 信息学奥赛一本通提高组2085:【21NOIP提高组】棋局
  19. 解决Windows 7下IE11无法卸载、无法重新安装,提示安装了更新的IE版本
  20. 新智元【Yoshua Bengio 亲自解答】机器学习 81 个问题及答案(最全收录)

热门文章

  1. 涡街流量计要怎么选型呢
  2. 签电子合同怎么少得了“诚信签”
  3. Mutex 学习笔记
  4. [天籁之音]《斯卡布罗集市(Scarborough Fair)》
  5. 成员变量、类变量、局部变量的区别
  6. Oracle 11g新特性direct path read引发的系统停运故障诊断处理
  7. html5水下泡泡效果,C4D水底气泡浮起特效案例教程Helloluxx VFX X-Particles 3 Cinema 4D Tutorial Underwater Bubbles...
  8. HTML5 Canvas动态绘制心型线和玫瑰线
  9. js对装有对象的集合,按照对象的属性名分组。
  10. vue项目禁用鼠标右键