找回密码
 立即注册

QQ登录

只需一步,快速开始

Cyp8888

注册会员

2

主题

9

帖子

108

积分

注册会员

积分
108
最新发帖

[已处理] 功能请教

Cyp8888
注册会员   /  发表于:2017-1-15 09:27  /   查看:4293  /  回复:9
本帖最后由 Cyp8888 于 2017-1-15 09:33 编辑

snap567.png
如上图所示,系统有如下需求:
1、通过查找表名,依次处理这每一个表。处理包括:
①首先从表名开始,获得表名下的数据区域;
②在该数据区插入空行;
③把空行上面一行的公式和数据格式、单元格格式复制给这些空行;
④在表格标题行获得某些字段的位置,通过其中一个字段比如ID的值定位到行,然后修改另一个字段比如总投资的值。也许还要修改其他更多字段的值。
⑤修改最后合计行的公式。有些表没有合计行,就不用修改公式。


对待处理的Sheet说明如下:
2、这些表都在同一个Sheet中。
3、Sheet中每两个表之间,有空行相隔,但不一定是一个空行,也许2个3个。
4、Sheet的第一行第一列是空的。

请教:用C#该如何编程?

另外,请教3个功能是否有接口:
1、如何把一行各单元格的公式复制到其他各行?每个单元格的公式是不同的。Excel中是用Range.Copy和Range.PasteSpecial函数实现的。
2、如何从一个单元格开始,选择其后(或者其上、或其左、或其右)的连续单元格?Excel中,是用Range.End[mExcel.XlDirection.xlDown]属性实现的。
3、基于Excel开发时,Range.Offeset功能,在SpRead中有对应的接口吗?


初来乍到,请多多帮助。谢谢!

9 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-1-16 17:56:06
沙发
您这个需求比较负责,通过绑定无法实现。

需要您根据数据源的大小设置table,然后通过对您数据源进行遍历同时在spread单元格中赋值。
Table有合计行的功能可以实现统计,如果添加了行,会自动变化

关于空行,您根据逻辑计算下下一个Table的开始行即可。
Sheet 第一行第一列为空 也是只要添加Table的时候算好开始位置即可。

复制公式可以获取当前单元格公式通过循环直接设置,也可以通过FillRange 的方式自动填充。
spread有AddSelection 方法添加选择区域
不太清楚Range.Offeset 的功能,您描述您的功能即可。


回复 使用道具 举报
Cyp8888
注册会员   /  发表于:2017-1-17 16:31:04
板凳
谢谢及时回复!
1、SpRead有查找的功能吗?包括:整个Sheet中查找,指定行中查找、指定列中查找;
2、有整行复制、粘贴公式的方法吗?
3、有类似Excel的Range.End[mExcel.XlDirection.xlDown]属性的功能吗?
4、Range.Offeset的用法是:range1=Range2.Offeset(int rowcount,int columncount)表示位于Range2单元格下面rowcount行、左面columncount列的单元格赋值给range1。
回复 使用道具 举报
Cyp8888
注册会员   /  发表于:2017-1-17 16:56:51
地板
本帖最后由 Cyp8888 于 2017-1-17 17:24 编辑

spread的AddSelection 方法添加区域后,被选中的单元格没有被选中的边框。请问如何设置?如何使AddSelection方法添加的区域,自动就有SpRead缺省的选择风格?
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-1-18 11:46:24
5#
先设置ActiveCell ,然后再设置selection


            fpSpread2.ActiveSheet.SetActiveCell(1, 1);
            fpSpread2.ActiveSheet.AddSelection(1, 1, 3, 3);
回复 使用道具 举报
Cyp8888
注册会员   /  发表于:2017-1-18 15:22:56
6#
dexteryao 发表于 2017-1-18 11:46
先设置ActiveCell ,然后再设置selection

谢谢!
经过试验,发现设置ActiveCell的单元格,比如包含在AddSelection的区域内。如果不在,则还是没有效果。
回复 使用道具 举报
Cyp8888
注册会员   /  发表于:2017-1-18 15:22:59
7#
dexteryao 发表于 2017-1-18 11:46
先设置ActiveCell ,然后再设置selection

谢谢!
经过试验,发现设置ActiveCell的单元格,比如包含在AddSelection的区域内。如果不在,则还是没有效果。
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-1-18 16:34:54
8#
对的
Active Cell需要在Selection中
回复 使用道具 举报
Cyp8888
注册会员   /  发表于:2017-1-18 22:37:07
9#
dexteryao 发表于 2017-1-18 16:34
对的
Active Cell需要在Selection中

烦请回答一下三楼的问题吧:
1、SpRead有查找的功能吗?包括:整个Sheet中查找,指定行中查找、指定列中查找;
2、有整行复制、粘贴公式的方法吗?
3、有类似Excel的Range.End[mExcel.XlDirection.xlDown]属性的功能吗?
4、Range.Offeset的用法是:range1=Range2.Offeset(int rowcount,int columncount)表示位于Range2单元格下面rowcount行、左面columncount列的单元格赋值给range1。SpRead有这类似的方法或属性吗?
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-1-19 09:27:26
10#
1 有search方法,,方法有比较多的重载,建议您看下文档。 00 33就是起始和技术行列
fpSpread1.Search(0, "te?t", false, false, false, true, 0, 0, 3, 3, ref x, ref y);

2. 设置ClipboardCopyOptions
        private void button1_Click(object sender, EventArgs e)
        {
            fpSpread2.ActiveSheet.ClipboardCopy(FarPoint.Win.Spread.ClipboardCopyOptions.Formulas);
        }

3. 不了解 Excel的Range.End[mExcel.XlDirection.xlDown] 您需要实现什么样的功能。
4. 没有类似方法,可以用  fpSpread2.ActiveSheet.GetArray获取一个数组,您自己计算下偏移量。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部