最近在做相关的东西,由于刚开始学,所以有很多不懂,希望各位大哥大姐帮忙解决下,给个范例谢谢了。 
1.当某个单元格为特定的值时,在指定的单元格内输入相关的数据(指定的单元格可以为多个),其实说白了就是一个条件语句,我直接用的IF...THEN...ELSE,但不知为什么,当不知道为什么输出的总是ELSE后面的,条件正确时和条件不正确时都一样。
2.当某两个单元格的值相等时(两个单元格分别由两个动态的参数控制,两列的不同行),在指定的位置输入特定的值,或者将由一个参数控制的单元格赋值到令一个单元格。

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
        if OpenDialog1.Execute then
        ExcelWorkBook1.ConnectTo(ExcelApplication1.Workbooks.Open
        (OpenDialog1.FileName,EmptyParam,EmptyParam,EmptyParam,
        EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
        EmptyParam,EmptyParam,EmptyParam,EmptyParam,0));
        ExcelWorkSheet1.ConnectTo(ExcelWorkBook1.Activesheet as _Worksheet);
        ExcelApplication1.Cells.NumberFormatLocal:='@';
        ExcelApplication1.Visible[0]    :=True;
    end;
      

  2.   

    以上是打开指定位置的Excle文件,应该没有问题。
      

  3.   

    procedure TForm1.Button2Click(Sender: TObject);
    var
        row1 :integer ;
        i :OleVariant;
    begin
         row1  :=4;
         while(row1<49) do
            begin
                row1:=row1+1;
                i:=row1;
                //机号
                ExcelWorksheet1.Cells.Item[i,8] :=ExcelWorksheet1.Cells.Item[i+78,38];
                ExcelWorksheet1.Cells.Item[i,23] :=ExcelWorksheet1.Cells.Item[i+123,38];
                //出港航班号
                ExcelWorksheet1.Cells.Item[i,9] :=ExcelWorksheet1.Cells.Item[i+78,35];
                ExcelWorksheet1.Cells.Item[i,24] :=ExcelWorksheet1.Cells.Item[i+123,35];
                //预计起飞时间
                ExcelWorksheet1.Cells.Item[i,12] :=ExcelWorksheet1.Cells.Item[i+78,39];
                ExcelWorksheet1.Cells.Item[i,27] :=ExcelWorksheet1.Cells.Item[i+123,39];
                //出港航线
                ExcelWorksheet1.Cells.Item[i,11] :=ExcelWorksheet1.Cells.Item[i+78,37];
                ExcelWorksheet1.Cells.Item[i,26] :=ExcelWorksheet1.Cells.Item[i+123,37];
                //更改航线为中文
                if (ExcelApplication1.Cells.Item[i,11].Value ='CAN') then
                   ExcelApplication1.Cells.Item[i,11].Value :='京/穗'            else if  (ExcelApplication1.Cells.Item[i,11].Value ='SZX') then
                   ExcelApplication1.Cells.Item[i,11].Value :='京/圳'
                ......
                           下面的代码是重复的,就省略了            //第二列
                row1  :=4;
                while(row1<strtoint(Edit1.Text)-123) do
                begin
                    row1:=row1+1;
                    i:=row1;
                 if  (ExcelApplication1.Cells.Item[i,26].Value ='SZX') then
                   ExcelApplication1.Cells.Item[i,26].Value :='京/圳'             else if  (ExcelApplication1.Cells.Item[i,26].Value ='SHE') then
                   ExcelApplication1.Cells.Item[i,26].Value :='京/沈'            else if  (ExcelApplication1.Cells.Item[i,26].Value ='DLC') then
                   ExcelApplication1.Cells.Item[i,26].Value :='京/连'            else if  (ExcelApplication1.Cells.Item[i,26].Value ='HRB') then
                   ExcelApplication1.Cells.Item[i,26].Value :='京/哈'            将某一列的数据先拷贝到某一列,然后再转化。
      

  4.   

    if  (ExcelApplication1.Cells.Item[i,26].Value ='SZX') then
    if语句需要加括号吗?好像没见过
      

  5.   

    if 语句加不加括号效果是一样的,没有什么区别,这个应该不是问题的重点。
        对于Delphi调用Excel的操作,其实还是有很多地方值得我们大家去考虑的。虽然网上也有相关的资料,但基本上都是一样的,都是一个帖子被到处粘来粘去的,真正有价值的贴和资料也并不是很多。
        真想要一本宝典,呵呵...
        靠大家了。
      

  6.   

    虽然网上也有相关的资料,但基本上都是一样的,都是一个帖子被到处粘来粘去的
    ***************************************************************************深有同感!最近俺也做一个关于EXCEL的软件,问题多多,还好现在终于完工了。看了你的代码,应该是没什么问题的,运行只有else后面的结果,说明if 条件不满足,看看参数传递有没有什么问题。另外问一下,你为什么要定义   i :OleVariant;  直接integer不好吗?
      

  7.   

    if  条件 then
     begin
    .. 成立处理 
     end else
       begin
     ..不成立处理
       end;
      

  8.   

    加两个断点看下,或者showmessage一下,
    或者更简单的办法,在excel里录个宏,看下vba自己的代码,拷过来就是了,这种方法任何困难都能解决
      

  9.   

    虽然网上也有相关的资料,但基本上都是一样的,都是一个帖子被到处粘来粘去的
    ***************************************************************************深有同感!最近俺也做一个关于EXCEL的软件,问题多多,还好现在终于完工了。看了你的代码,应该是没什么问题的,运行只有else后面的结果,说明if 条件不满足,看看参数传递有没有什么问题。另外问一下,你为什么要定义   i :OleVariant;  直接integer不好吗?
    *****************************************************************************
    单元格的行列用OleVariant我是听我的一个朋友讲的,具体为什么我也不太清楚,应该是定义的原因吧,我开始用的也是Integer,执行时报错。
      

  10.   

    加两个断点看下,或者showmessage一下,
    或者更简单的办法,在excel里录个宏,看下vba自己的代码,拷过来就是了,这种方法任何困难都能解决*************************************************************************************
    关于VBA的相关知识我还不太懂,最近这段时间会看相关的内容。
    谢谢各位了。
      

  11.   

    楼主很谦虚哦!偶是Delphi新手,虽不能解决楼主的问题,不过顶一下总可以了吧。