找回密码
 立即注册

QQ登录

只需一步,快速开始

yuanhs

中级会员

6

主题

19

帖子

727

积分

中级会员

积分
727

活字格认证微信认证勋章

最新发帖
yuanhs
中级会员   /  发表于:2015-10-29 11:17  /   查看:11679  /  回复:16
如何使用Spread 实现类似Excel的插入单元格  
活动单元格下移 活动单元格右移 例子中是整行、整列插入的。
还有如何获得用户的ActiveSheet的使用区域 ,例如总大小为65535*256 但一般只会使用左上角的区域,如何获得左上角区域的大小。

16 个回复

倒序浏览
rbgongming
论坛元老   /  发表于:2015-10-29 14:38:00
沙发
回复 1楼yuanhs的帖子

你好,
行列插入可以使用AddRows和AddColumns方法,
区域选择可以使用如下代码:
Private Sub FpSpread1_MouseMove(sender As Object, e As MouseEventArgs) Handles FpSpread1.MouseMove
        Dim cr As FarPoint.Win.Spread.Model.CellRange
        cr = FpSpread1.GetCellFromPixel(0, 0, e.X, e.Y)
        Debug.Print(e.X & ", " & e.Y)
    End Sub
这个取得的 e.X和e.Y应该就是你说的内容吧。
希望可以帮到你解决问题。
把简单的事做好就是不简单,
把平凡的事做好就是不平凡。
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-10-29 14:39:00
板凳
回复 1楼yuanhs的帖子

感谢您对该问题的反馈。
根据我的理解,您指的是Excel的Shift Cell Down/Shift Cell Left的功能,可以将单元格的内容移动。
Spread的MoveRange方法可以实现此功能,只是将某个单元格移到其他位置,代码参考:
  1. fpSpread1.ActiveSheet.Cells[0, 0, 2, 2].Text = "Test Move";
  2. fpSpread1.ActiveSheet.MoveRange(0, 0, 4, 0, 2, 2, true);
复制代码


详细的可以参考随机安装的产品文档,索引如下:
FarPoint.Win.Spread Assembly > FarPoint.Win.Spread Namespace > SheetView Class : MoveRange Method

可以通过Spreqad.ActiveSheet.Cells创建一个Range区域,然后Range暴露了Column, Row属性指定当前区域的第一个单元格的列和行索引。
详细的请参考产品文档,文档索引
Spread Windows Forms 8.0 Product Documentation > Developer's Guide > Understanding the Spreadsheet Objects > Working with Cells > Creating a Range of Cells
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
yuanhs
中级会员   /  发表于:2015-10-29 20:39:00
地板
回复 2楼rbgongming的帖子

你好,我是想获得用户使用的区域的大小, 类似ActiveSheet.UsedRange,没有触发MovseMove
回复 使用道具 举报
yuanhs
中级会员   /  发表于:2015-10-29 20:48:00
5#
回复 3楼Alice的帖子

你好, 我的想法是选中一个单元格 右键插入单元格  列:插入一个单元格时,将在此单元格以下的部分都下移一个单元格; 行: 插入单元格后此单元格行右侧所有的单元格向右移动一个,  当然了这2种情况用户只选择一种, 现在我想知道将多少行向下移动 或是多少列向右侧移动。  c#操作Excel时 我使用过 ActiveSheet.UsedRange.Columns.Count;
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-10-30 09:46:00
6#
回复 5楼yuanhs的帖子

首先你需要创建CellRange:
  1. FarPoint.Win.Spread.Cell range1;
  2. range1 = fpSpread1.ActiveSheet.Cells[1, 1, 3, 3];
  3. range1.Value = "Value Here";
  4. range1.Note = "This is the note that describes the value.";
复制代码

这样通过CellRange您就可以知道Column,Row,ColumnCount, RowCount。
然后MoveRange方法又可以对range做移动。
文档请参考我3楼的索引。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
yuanhs
中级会员   /  发表于:2015-10-30 10:13:00
7#
回复 6楼Alice的帖子

你好 我的意思是如何获得1,1,3,3 这4个数值。不会需要遍历整个sheet吧 这样效率低,我觉得Spread里面记忆了用户使用的区域
回复 使用道具 举报
rbgongming
论坛元老   /  发表于:2015-10-30 10:45:00
8#
回复 7楼yuanhs的帖子

你好,你可以使用GetSelection方法
Dim cr As FarPoint.Win.Spread.Model.CellRange
    cr = FpSpread1.ActiveSheet.GetSelection(0)
通过cr.Row,cr.Column,cr.RowCount,cr.ColumnCount
可以得到你想要的
把简单的事做好就是不简单,
把平凡的事做好就是不平凡。
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-11-2 17:54:00
9#
回复 1楼yuanhs的帖子

请问问题解决了么?

评分

参与人数 1满意度 +5 收起 理由
yuanhs + 5 谢谢 问题解决

查看全部评分

请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
yuanhs
中级会员   /  发表于:2016-1-22 16:52:00
10#
没有,FpSpread1.ActiveSheet.GetSelection(0) 这样获得的是当前激活单元格及左上角的部分,我想获得的是从(0,0)开始到 最 右下角有数据的那个单元格的那部分,即sheet中使用的左上角部分。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部