2014-05-21 45 views
0
procedure TForm1.Button1Click(Sender: TObject);  
var  
    xlap,xlbook,xlsheet:variant; 
    y:integer; 
begin 
    xlap:=createoleobject('excel.application'); 
    xlbook:=xlap.workbooks.add; 
    xlap.visible:=true; 
    xlsheet:=xlbook.worksheets.add; 

    for y:=1 to 50 do 
    begin 
    xlsheet.cells[y,2].value:= concat('=IF(A',y,'>6,"Good","Bad")') 
    inc(y); 
    end; 
end; 

這是我通過Delphi製作Excel的代碼。我想將IF公式輸入到Excel的B列中,但在使用concat('=IF(A',y,'>6,"Good","Bad")')時出現錯誤。如何在Delphi中的字符串之間包含一個變量?

可能是我需要另一種方式來包括這些字符串之間的y。

有什麼建議嗎?由於

+1

也許IntToStr(y)? Delphi是強類型的......你不能像這樣混合字符串和整數。 – Frazz

+0

哪個delphi單元有'concat'函數?如果完整的錯誤文本不是**頂級sesert **請將此添加到您的問題 –

+0

您的意思是? xlsheet.cells [y,2] .value:='= IF(A',IntToStr(y),'> 6,「Good」,「Bad」)' – Ray

回答

3

除了Tony的回答約Format,這裏還有其他一些方法。 (Format是巨大的,如果你有混合類型或多個值,但它會帶來一些開銷可能不需要。)

你可以用一個簡單的+連接字符串 - 事實上,Concat documentation說,做同樣的事情,但更快:

Temp := 'ing'; 
Str := 'Test' + Temp; // Str = 'Testing' 

正如你y變量是一個整數,則需要先將其轉換爲字符串(注意,您不需要Inc(y);,因爲環路將做到這一點已經 - 它的自動遞增從每次通過循環的起始值到結束值):

for y:=1 to 50 do 
begin 
    xlsheet.cells[y,2].value:= '=IF(A' + IntToStr(y) + '>6,"Good","Bad")'; 
end; 
+0

它的工作原理。非常感謝Ken White先生。但是A和' – Ray

+0

@ Ray之間沒有逗號:是的,我抓住並修復了它。謝謝。 :-) –

3

德爾福有一個format聲明有點像在C的sprintf printf的,以及近

xlsheet.cells[y,2].value:= format('=IF(A%d>6,"Good", "Bad")',[y]) 

%d是一個整數的佔位符。查看它的其他東西的負載。 注意要插入的變量在數組中被佔據。

+0

它的工作原理。非常感謝Tony先生。順便說一句,A和%d之間沒有逗號 – Ray

相關問題