Cell 组件开发整理 cici
特别说明:本文仅是针对Cell组件v5.3.9.12这个版本的来说的,可能其中一些Cell组建的缺陷在新版本中修复了。请不要过了N年再来评价这篇文章的有效性,或者评价我博客中其他文章的有效性。
最近一直从事Cell组建报表的开发工作,略有心得,特来和大家一起分享。
1、 导出的CSV文件格式中包含乱码。
如果遇到这个问题修改Excel的标示语言为中文即可。以Office 2007为例:打开Excel选项

然后选择语言设置

最后选择中文(中国)即可。如果是英文版本的Excel,则选择Chinese(PRC)即可。

2、弹出单元格属性对话框后的自动调整单元格列宽和行高问题。
在Cell组件有这样一个方法:
CellPropertyDlg()
调用这个方法后,会弹出一个单元格属性的设置的对话框。但是奇怪的是这个方法返回值中没有提供用户点击的是确定还是取消按钮。如果用户改变了字体大小,而此时你又希望被改变的单元格会根据新的大小自动调整宽度和高度。匆忙写上代码,就会发现用户点击了取消按钮后,你的单元格的高度和宽度也重新调整了。最简单的方法还是对比原来的字体大小和风格,通过GetCellFont,GetCellFontSize,GetCellFontStyle来判断调用CellPropertyDlg前后的值,如果发现变化了,就调用SetColWidth,GetColBestWidth来自动调整单元格宽度或高度。
3、打印预览中一个BUG
在5.3.9.12这个版本中,我发现了一个Exception,程序直接挂掉。并且DONET无法捕捉到这个异常。重现步骤:停掉打印机缓存服务Print Spooler。然后打开打印预览对话框,然后选择“打印设置”,然后再选择“打印机”,这个Exception就出现了。
所以在用户打开打印预览之前,我们先要判断这个服务是否开启了。
private bool CheckPrinterServer()
{
bool CheckPrinterServer;
try
{
foreach (ServiceController server in ServiceController.GetServices())
{
if (server.ServiceName.ToLower() == "spooler")
{
return (server.Status == ServiceControllerStatus.Running);
}
}
CheckPrinterServer = false;
}
catch (Exception ex)
{
Throw
}
return CheckPrinterServer;
}
4、导出PDF文件的问题
在导出PDF中有三个问题,其一就是打印机服务没有开启的情况,第二个就是没有安装打印机的情况,第三就是导出大量数据的情况。
第一种情况的解决办法上面已经说过了。第二种情况下,会出现导出的PDF格式有问题。所以要判断是否安装了打印机:
private bool CheckIsHavePrinter()
{
bool CheckIsHavePrinter ;
try
{
string wmiSQL = "SELECT * FROM Win32_Printer";
if (new ManagementObjectSearcher(wmiSQL).Get().Count == 0)
{
return false;
}
CheckIsHavePrinter = true;
}
catch (Exception ex)
{
Throw
}
return CheckIsHavePrinter;
}
第三种情况程序会直接退出,我测试了2000行37列数据,就会出现这种情况。这个BUG我已经提交给官方了,他们正在修正中,未来版本不会出现此问题。
5、英文环境下,乱码问题。
在英文环境下,CELL组件会出现乱码,这个可以向官方索要UNCODE版本。我已经获得了这个版本,经测试可用。
6、导出的HTML格式图片大小不对。
在CELL组件中导出HTML中的图片全部是自动放缩的。所以和原来的大小可能不太一样。我的做法是导出后,在代码中读取HTML文件,使用正则找到图片,直接修改,最后保存。适合有少量的图片的HTML修改。
7、弹出DONET鼠标右键菜单
CELL提供了一个右键菜单,可惜不够美观,而且需要动态添加数据,使用起来不方便。其实可以使用以下代码来弹出DONET的右键菜单:
Point p = new Point(Control.MousePosition.X, Control.MousePosition.Y);
this.ContextMenuMouse.Show(this, p);
其中变量e可以使用全局变量来传递。
8、无法导出图片到Excel,无法导出浮动图片到HTML文件
用官方的话说就是目前还不支持这个功能。但是有时变态的客户可管不了那么多。那么我们的解决办法就是硬着头皮用代码读入导出后的Excel文件 或HTML文件,然后使用代码添加上去图片,最后在保存。对付变态的客户,只能用这种变态的方法……。
9、英文版本的Cell组件。
Cell组件的英文版本是不提供下载的,如果想用怎么办?看到Cell安装目录下的CellResChs.dll文件了吗?用VS打开它,你会惊喜地发现所有的字符串都在这个里面了,那么就用VS把它翻译为英文吧^_^
10、破解问题
我个人非常不推荐破解,非常推荐大家去支持一下国产软件。Cell组件的一套价格是9800RMB。因此我要特别说明一下,我说的破解,并不是专门针对Cell组件的,而是针对在控件上画一些“未注册”信息的这一类软件的一些破解思路。
众所周知,一些未注册软件,会在标题上或者软件的Form窗体上画上一些“未注册”信息。对于这种软件改如何破解呢?其实很简单,这些软件会调用一些API来画信息,只要找到调用的地方,然后跳过去就行了。大家可以参考以下API:
DrawTextA , DrawTextW, ExtTextOutA, ExtTextOutW, TextOutA, TextOutW
再次声明:请不要向我索取任何破解版本的软件,此类邮件我一概不予理睬。