2012-08-11 125 views
4

我正在研究一種連接到SQL數據庫的工具,獲取數據集並在網格中顯示該數據。用戶必須能夠選擇一個單元塊(只是矩形)並按下CTRL + C將其複製到剪貼板。以excel格式將多個單元格從網格複製到剪貼板?

如何做到這一點:

  • 在可以粘貼到Excel的格式?我希望已經有一些爲此做好了準備。它不需要像Excel這樣的剪貼板功能,只需突出顯示矩形的一組單元格並將其複製到剪貼板即可。

  • 如果可以在TStringGrid中完成,我寧願保留我的功能,但也可以使用支持此功能的組件。

+1

@TLama張貼問題的解答(他刪除了,因爲他沒有安裝到Excel測試)。我已經測試過了,希望他能看到這個評論,然後回過頭來取消刪除它。 – 2012-08-11 19:43:43

+0

@Ken,感謝您的測試!我已經修復了代碼(至少是我發現的)並刪除了該帖子。 – TLama 2012-08-11 19:59:46

+0

我認爲要插入到Excel和大多數平板電腦上,必須製作RTF或HTML表格並將其複製到剪貼板中。 HTML構造可能更容易。 – 2012-08-13 07:44:37

回答

6

你可以試着給你單元格的值複製爲TAB delimited text,像這樣的代碼呢:

procedure TForm1.Button1Click(Sender: TObject); 
var 
    S: string; 
    X, Y: Integer; 
begin 
    S := ''; 
    for Y := StringGrid1.Selection.Top to StringGrid1.Selection.Bottom do 
    begin 
    for X := StringGrid1.Selection.Left to StringGrid1.Selection.Right - 1 do 
     S := S + StringGrid1.Cells[X, Y] + #9; 
    S := S + StringGrid1.Cells[StringGrid1.Selection.Right, Y] + sLineBreak; 
    end; 
    Delete(S, Length(S) - Length(sLineBreak) + 1, Length(sLineBreak)); 
    Clipboard.AsText := S; 
end; 
+2

我打算髮表一個答案,看到你的,並想知道爲什麼它已被刪除。然後,我看到你的筆記關於沒有Excel,所以我幾乎只是檢查,看看Excel是否會從剪貼板中正確採用標籤文本。它的確如此,所以我發表一個答案是不公平的。 :-) – 2012-08-11 20:06:18

+1

問題是關於使用Ctrl + C從'TStringGrid'複製到剪貼板,然後用戶可以粘貼到Excel範圍。不需要任何其他格式;你的代碼可以正常工作。 :-) – 2012-08-11 20:48:35

+1

@Jerry,另一種方法是使用自然的Excel格式,即XLS。我發現['this unit'](http://delphi.cz/img/nativexls/uNativeXLSExport.txt)基於Excel文件['format description'](http://www.openoffice.org/sc/excelfileformat .PDF)。有一個字符串網格的XLS導出過程,即'StringGridToXLS',您可以嘗試爲您的目的進行修改(將TXLSWriter.FStream成員的內容複製到剪貼板而不是文件),但是,我可以' t驗證它... – TLama 2012-08-11 20:48:49

相關問題