找回密码
 立即注册

QQ登录

只需一步,快速开始

xiwu

中级会员

97

主题

445

帖子

910

积分

中级会员

积分
910

活字格认证

xiwu
中级会员   /  发表于:2012-4-12 11:20  /   查看:6704  /  回复:9
在EXCEL中操作时,用的A1方式定位单元格,在spread中用R1C1操作,请问如何转换呢?比如:B5转成R5C2

9 个回复

倒序浏览
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-4-12 12:18:00
沙发
导入Excel之后设置ReferenceStyle = R1C1之后,Spread会自动完成转换工作:

  1.     // Excel中Cell[0,0]的公式为 SUM(B1:E1)
  2.     fpSpread1.OpenExcel("test.xls");
  3.     fpSpread1.ActiveSheet.ReferenceStyle = FarPoint.Win.Spread.Model.ReferenceStyle.R1C1;
  4.     // 导入之后在Spread中自动替换为 SUM(RC[1]:RC[4])
复制代码
回复 使用道具 举报
xiwu
中级会员   /  发表于:2012-4-12 13:04:00
板凳
我想是先选择spread的区域,然后操作excel相同区域,跟你说的过程是反的,怎么做?
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-4-12 16:21:00
地板
如果是导出到Excel,把代码修改一下就可以:
  1.     fpSpread1.ActiveSheet.ReferenceStyle = FarPoint.Win.Spread.Model.ReferenceStyle.R1C1;
  2.     fpSpread1.ActiveSheet.Cells[0, 0].Formula = "SUM(RC[1]:RC[4])";
复制代码
回复 使用道具 举报
xiwu
中级会员   /  发表于:2012-4-12 19:13:00
5#
我想选择一个区域,保存这个区域如:R1C1:R10C10,然后将这个区域传到处理excel的程序中,注意:不是spread导入、导出excel
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-4-13 11:25:00
6#

回复 5# xiwu 的帖子

可能我没有完全明白你意思,下面是我的理解不知是否正确:
你现在有两个程序同时运行,一个处理Spread,一个处理Excel,你希望选中Spread中的R1C1:R10C10区域时,处理Excel程序中同时选中Excel的A1:J10这个区域。

如果我的理解正确,你只需完成一个从R1C1:R10C10转换为A1:J10的一个函数就可以了。
回复 使用道具 举报
xiwu
中级会员   /  发表于:2012-4-13 12:47:00
7#
是的,是这个意思,R1C1转为A1怎么做?能否指导一下
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-4-13 15:08:00
8#
简单实现了以下,你可以参考:
  1.     private String RCToA1(FarPoint.Win.Spread.Model.CellRange range)
  2.     {
  3.         Int32 startRow = range.Row + 1;
  4.         Int32 endRow = range.Row + range.RowCount;
  5.         String startColumn = IntToChar(range.Column);
  6.         String endColumn = IntToChar(range.Column + range.ColumnCount - 1);
  7.         MessageBox.Show(String.Format("{0}{1}:{2}{3}", startColumn, startRow, endColumn, endRow));
  8.         return String.Format("{0}{1}:{2}{3}", startColumn, startRow, endColumn, endRow);
  9.     }
  10.     private String IntToChar(Int32 num)
  11.     {
  12.         String str = "";
  13.         if (num == 0)
  14.         {
  15.             str = "A";
  16.         }
  17.         else
  18.         {
  19.             for (Int32 i = 0; num != 0; i++)
  20.             {
  21.                 if (num == 1)
  22.                 {
  23.                     str = "A" + str;
  24.                     break;
  25.                 }
  26.                 str = (Char.ConvertFromUtf32(65 - (i != 0 ? 1 : 0) + num % 26)).ToString() + str;
  27.                 if ((num % 26 == 0) && (num / 26 == 1))
  28.                 {
  29.                     str = "A" + str;
  30.                     break;
  31.                 }
  32.                 num = num / 26;
  33.             }
  34.         }
  35.         return str;
  36.     }
复制代码
回复 使用道具 举报
xiwu
中级会员   /  发表于:2012-4-13 15:42:00
9#
欧,三克油
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-4-13 17:15:00
10#
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部