找回密码
 立即注册

QQ登录

只需一步,快速开始

sakeryu

初级会员

34

主题

122

帖子

322

积分

初级会员

积分
322

活字格认证

sakeryu
初级会员   /  发表于:2012-5-9 11:11  /   查看:6336  /  回复:9
我有spread的excel模板,其中有如“?企业名称”等字样的单元格,但我有个功能能实现查找到它,但在另一个功能中就能不查找到它(只是模板不同)这是为什么?查找代码如下:
//临时行列
            int iTmpRow = -1;
            int iTmpCol = -1;

            iTmpRow = 1;
            while (iTmpRow >= 0)
            {
                fpSpread1.Search(cbmBookType.SelectedIndex, "?企业名称", false, false, true, false, 0, 0, ref iTmpRow, ref iTmpCol);
                if (iTmpRow != -1)
                    st.Cells[iTmpRow, iTmpCol].Value = st.Cells[iTmpRow, iTmpCol].Value.ToString().Replace("?企业名称", "我企业的名称");
                else
                    break;
            }

其中cbmBookType.SelectedIndex为指定的sheet的索引号,0或1,这个是肯定有值的.

附上excel模板。

模板.zip

7.32 KB, 下载次数: 563

zip

9 个回复

倒序浏览
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-5-9 12:02:00
沙发
sakeryu,你好

我使用你的代码可以准确的替换两个Sheet中的"?企业名称",
附件是一个简单Demo,修改了cbmBookType.SelectedIndex和st部分,运行程序之后打开你发送的excel文件,然后点击【替换】,可以正常替换

你提到的“但在另一个功能中就能不查找到它(只是模板)这是为什么”具体指的哪一个功能呢

VS2010 + Spread .net 6.0.3505
4385_Search.zip (17.8 KB, 下载次数: 520)
回复 使用道具 举报
sakeryu
初级会员   /  发表于:2012-5-9 12:19:00
板凳
不知道,我的代码如下:

try
            {
                fpSpread1.OpenExcel(Application.StartupPath + @"\Template\账簿套打模板\账簿模板.xls");
            }
            catch {
            }

            Int32 curRow = 4;
            int nYear,nMonth,nDay;
            int SelIndex=0;//cbmBookType.SelectedIndex;
            SheetView st = fpSpread1.Sheets[SelIndex];
            //临时行列
            int iTmpRow = -1;
            int iTmpCol = -1;

            iTmpRow = 1;
            while (iTmpRow >= 0)
            {
                fpSpread1.Search(SelIndex, "?企业名称", false, false, true, false, 0, 0, ref iTmpRow, ref iTmpCol);
                if (iTmpRow != -1)
                    st.Cells[iTmpRow, iTmpCol].Value = st.Cells[iTmpRow, iTmpCol].Value.ToString().Replace("?企业名称", "我的企业名称");
                else
                    break;
            }
回复 使用道具 举报
sakeryu
初级会员   /  发表于:2012-5-9 12:21:00
地板
就是不能替换到“?企业名称”,我调试代码,查找的返回值是-1
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-5-9 12:27:00
5#
你运行我的代码能正常替换吗
回复 使用道具 举报
sakeryu
初级会员   /  发表于:2012-5-9 12:41:00
6#
你的能,是不是打开excel要占用时间啊,我的是2步在一步中完成的,你是分开的
回复 使用道具 举报
sakeryu
初级会员   /  发表于:2012-5-9 12:50:00
7#
我又试了,好象问题出在
SheetView st = fpSpread1.Sheets[SelIndex];
如果将fpSpread1.ActiveSheet换成st就不能替换了,请问是bug还是什么问题?
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-5-9 14:11:00
8#
代码没有问题,只是你Excel中看上去是只有两个Sheet,其实有4个Sheet,其中Sheet1和Sheet2都被隐藏了

png

png
  1.     private void 打开ToolStripMenuItem_Click(object sender, EventArgs e)
  2.     {
  3.         try
  4.         {
  5.             fpSpread1.OpenExcel(Application.StartupPath + @"\Template\账簿套打模板\账簿模板.xls");
  6.             foreach (SheetView view in fpSpread1.Sheets)
  7.             {
  8.                 view.Visible = true;
  9.             }
  10.         }
  11.         catch
  12.         {

  13.         }

  14.         //Int32 curRow = 4;
  15.         //int nYear, nMonth, nDay;
  16.         int SelIndex = 2;//cbmBookType.SelectedIndex;
  17.         SheetView st = fpSpread1.Sheets[SelIndex];
  18.         //临时行列
  19.         int iTmpRow = -1;
  20.         int iTmpCol = -1;

  21.         iTmpRow = 1;
  22.         while (iTmpRow >= 0)
  23.         {
  24.             fpSpread1.Search(SelIndex, "?企业名称", false, false, true, false, 0, 0, ref iTmpRow, ref iTmpCol);
  25.             if (iTmpRow != -1)
  26.                 st.Cells[iTmpRow, iTmpCol].Value = st.Cells[iTmpRow, iTmpCol].Value.ToString().Replace("?企业名称", "我的企业名称");
  27.             else
  28.                 break;
  29.         }  
  30.     }
复制代码
回复 使用道具 举报
sakeryu
初级会员   /  发表于:2012-5-9 16:15:00
9#
问题解决了,谢谢。
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-5-9 17:17:00
10#
OK
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部