一 组件原理说明
1 Spread forWinForms 10版表格控件安装步骤
1双击 “SpreadWin10.msi”文件进行安装;
2在弹出的对话框中点击 “下一步” 继续安装;
3在弹出的对话框中点击“接受许可协议”,点击“下一步”继续安装;
4在弹出的“自定义安装”对话框中,建议安装所有资源。点击“下一步”继续安装;
5在弹出的对话框中点击“安装”正式开始安装Spread 产品;
6安装过程需要进行文件复制和重置VS工具箱等操作,所以需要一段时间,请耐心等待;
7等待出现安装完成对话框表示安装成功。
2 添加Spread表格控件到VS工具箱
1新建WinForms 项目;
2工具箱点击右键,选择添加选项卡;
3在该选项卡中右键点击 “选择项”,添加FpSpread控件;
4拖拽Spread到窗体,效果如下
二 文件操作
1 打开本地文件
[问题点]
1 Spread控件调用什么方法加载本地文件?
[解决方案]
1 使用OpenFileDialog通用对话框,选择文件后缀为*.xls;*.xlsx的文件;
2 通过文件路径打开Excel文件并将其加载到Spread控件中。
[技术点整理]
1 提示选择文件,并将文件后缀设置为*.xls;*.xlsx
2 获取文件物理路径,打开Excel文件将其加载到Spread控件中,并截断空行和列以提高性能。
2 保存到本地
[问题点]
1 Spread控件上的文件如何保存到本地?
[解决方案]
1 使用SaveFileDialog通用对话框,设置保存文件后缀为*.xls;*.xlsx
2 指定操作系统创建新文件,如果文件已存在,它将被覆盖。
[技术点整理]
1 提示用户选择文件的保存位置,并设置当前文件名后缀字符串,该字符串决定对话框的“另存为文件类型”或“文件类型”框中出现的选择内容
2 指定操作系统创建新文件流,将Spread控件中内容保存到文件流中
3 保存到数据库
[问题点]
1 文件用什么格式保存?
2 如何保存?
[解决方案]
1 文件格式转换并压缩
1.1 创建内存流对象,将spread控件保存到XML文件中,保存形式为所有数据;
1.2 将XML文件的内容保存到内存流,从当前流中读取字节块并将数据写入buffer中;
1.3 将文件字节压缩后,转换为文件流输出。
2 保存数据
2.1 往数据库插入一条带有空blob类型的数据,id为GUID,插入成功后返回当前id;
2.2 通过返回的id更新之前插入的数据。
[技术点整理]
1 创建内存流对象;
2 将文件保存到内存流;
3 将流内容写入字节数组,返回新字节数组,并关闭内存流;
4 创建DataSet对象,添加一个DataDable,表名和列名与数据库表名和列名一致,将id、文件路径、文件内容分别赋值给DataDable中对应字段;
5 调用WebService服务中保存数据库方法保存数据,参数是第4步创建的DataSet对象。
[注意]
1 AxServer中的Web.config文件中的configuration=>connectionStrings=>add[_Default]中的connectionString和providerName配置如下:
4 读取数据库文件
[问题点]
1 如何确定要读取的文件?
2 获取到文件内容如何展示到Spread控件上?
3 通过Spread控件open方法打开内存流失败,抛异常如何处理?
[解决方案]
1 首先新建gridcontrol,查询出数据库中的文件内容并展示;
2 通过选中行id获取文件内容,将文件解压,并转换成内存流。
3 通过Spread控件open方法打开内存流失败,抛异常原因是保存到数据库没有成功写入XML文件导致读取不到。
[技术点整理]
1 点击【读取数据库文件】按钮,弹出Dev Gridcontrol页面,页面展示数据库中的数据,其中文件内容为haperlink超链接,实现方式请学习devgridcontrol。
2 单击选中行文件内容超链接,将获取的文件内容展示到Spread控件上
2.1 点击【open】超链接,可以获取选中行id;
2.2 通过选中行id查询选中行文件内容;
2.3 因为存入数据库的文件是压缩文件,所以取出来的时候需要将文件内容解压;如果没有压缩,不用解压;
2.4 使用Spread控件Open方法读取文件,参数是解压后的内存流。
三 单元格操作
1 动态合并单元格
[问题点]
1 如何获取选中区域?有哪些特殊情况?
2 合并思路?
[解决方案]
1 获取当前sheet页,通过执行GetSelections()方法获取选中单元格区域的起始行索引、起始列索引、跨行数、跨列数,返回一个CellRange类型的数组;
2 特殊情况包括,全选、鼠标在列标题上拖动、鼠标在行标题上拖动三种;
3 合并方式为获取选中区域左上角第一个单元格,并将其扩大填充到整个选中区域。
[技术点整理]
1 获取选中单元格区域;
2 判断特殊情况,如果为特殊情况将起始行、起始列索引设置为0;
3 第一个单元格的行和列扩大值设置为选中区域的跨行数和跨列数。
2 动态拆分单元格
[问题点]
1 拆分思路是什么?
[解决方案]
1 获取选中区域和特殊情况与合并单元格一样;
2 拆分方法为遍历选中区域单元格,将每一个单元格的跨行数与跨列数设置为1。
[技术点整理]
3 动态单元格变色
[问题点]
1 如何获取变色编辑器?
[解决方案]
1 遍历选中单元格
2 使用变色编辑器,将选中颜色填充到选中单元格
[技术点整理]
1 遍历选中区域,创建变色编辑器ColorDialog对象,调用Color属性,获取选定的颜色并填充。
4 改变字体
[问题点]
1 如何获取字体编辑器?
[解决方案]
1 遍历选中单元格
2 使用字体编辑器,使用选中字体或样式替换当前字体或样式
[技术点整理]
1 遍历选中区域,创建字体编辑器FontDialog对象,调用Font属性,获取选定字体并填充。
5 新增表单
[问题点]
1 如何创建新表单
2 如何避免随意增加或删除sheet页
[解决方案]
1 创建新sheet页
2 将新sheet页添加到当前控件中
[技术点整理]
1 创建新sheet页
2 将新sheet页添加到当前控件中
3 将当前控件的TabStripInsertTab属性设置为false,就不能随便添加删除sheet了
6 选中行下插入行
[问题点]
1 怎么确定选中行索引?
2 插入行方法?
[解决方案]
1 选中行索引可以通过获取选中区域返回的起始行索引得到
2 Spread控件中add()方法插入行
[技术点整理]
1 Add()方法中两个参数,分别代表插入起始行索引和添加的行数
7 边框设置
[问题点]
1 边框样式怎么确定?
2 全边框边框压线问题怎么解决?
[解决方案]
1 获取选中区域,根据实际情况设置边框,实际情况分为上边框、下边框、左边框、右边框、全边框、无边框、外边框
2 全边框压线问题通过遍历单元格,筛选出压线部分单元格并去除压线部分。
[技术点整理]
1 确定边框样式
选择边框之前,设置单元格上、下、左、右边框的样式,设置方法为新建ComplexBorderSide对象,两个参数为边框类型和边框颜色
2 分别设置上、下、左、右、全、外、无七种情况的边框样式
例:上边框,将top对象作为第二个参数传到ComplexBorder方法中,其余的参数为null
3 全边框压线问题,需要通过遍历单元格,筛选出压线部分单元格并去除压线部分。
四 数据操作
1 公式
[问题点]
1 如何使用公式编辑器?
[解决方案]
1 创建公式编辑器实例,参数为将要使用编辑器的表单
2 展示编辑器对话框
2 手动设置公式文本框
[问题点]
1 如何使用公式文本框
[解决方案]
1 拖拽公式文本框到Spread控件上
2 通过formulaTextBox下的Attach方法,把当前Spread实例作为参数赋值即可。
3 打印
[问题点]
1 如何使用Spread内置打印对话框?
[解决方案]
1 调用内置打印对话框,显示打印按钮,显示打印预览按钮。