一 组件原理说明

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 调用内置打印对话框,显示打印按钮,显示打印预览按钮。