以excel格式将多个单元格从网格复制到剪贴板?

Jer*_*dge 4 delphi excel clipboard tstringgrid delphi-xe2

我正在开发一种工具,它连接到SQL数据库,获取数据集,并在网格中显示该数据.用户必须能够选择一个单元格块(只是矩形),然后按CTRL+ C将其复制到剪贴板.

我该怎么做呢:

  • 在可以粘贴到Excel的格式?我希望已经有一些现成的东西.它不需要Excel之类的所有剪贴板功能,只需突出显示一组矩形单元格并将其复制到剪贴板即可.

  • 如果它可以在一个TStringGrid我喜欢保持我的功能,但也可以使用支持它的组件.

TLa*_*ama 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;
Run Code Online (Sandbox Code Playgroud)

  • @Jerry:Tab-delimited*适用于其他场景*.特定于Excel的格式*不* - 它将特定于Office应用程序; 制表符分隔的作品在Excel,Word,地球上任何识别标签的文本编辑器等.此外,这不是你的问题 - 它将是一个新的. (3认同)
  • 我打算发一个答案,看到你,并想知道为什么它被删除了.然后我看到你关于没有Excel的说明,所以我几乎只是检查Excel是否会从剪贴板中正确地获取选项卡式文本.它确实如此,所以发布答案对我来说是不公平的.:-) (2认同)
  • 但制表符分隔的文本几乎是普遍接受的.您可以从NotePad复制并粘贴到任何商业文本编辑器等.您可以将其作为字符串读取,在选项卡上解析它,并将其放入另一个StringGrid.使用Excel格式不允许任何上述内容.(例如,使用Excel格式在任何地方都不适用;您没有Excel.<g>) (2认同)