如何在 MS Windows XP 中检索 Unicode CSV 剪贴板数据?

wfo*_*ter 3 delphi clipboard windows-xp

我正在为一个较大的项目编写一个测试应用程序,似乎无法从 Windows 剪贴板检索 Unicode CSV 数据,我使用内置的 GetClipboardData api 调用成功检索 CF_UNICODETEXT,但是当我将 Unicode CSV 放在 MSExcel 中的剪贴板上时,尝试使用 CSV 格式检索,但得到的数据不正确。这是一些代码;

procedure TForm1.Button7Click(Sender: TObject);
var
   hMem     : THandle;
   dwLen    : DWord;
   ps1, ps2 : pChar;
begin
   OpenClipboard( form1.Handle );
   RichEdit1.Lines.Clear;
   try
      if Clipboard.HasFormat( CF_UNICODETEXT ) then
      begin
         hMem := GetClipboardData( CF_UNICODETEXT );
         ps1 := GlobalLock( hMem );
         dwLen := GlobalSize( hMem );
         ps2 := StrAlloc( 1 + dwLen );
         StrLCopy( ps2, ps1, dwLen );
         GlobalUnlock( hMem );
         RichEdit1.Lines.Add( ps2 );
      end
      else
         ShowMessage( 'No CF_UNICODETEXT on Clipboard!' );
   finally
      CloseClipboard;
   end;
end;
Run Code Online (Sandbox Code Playgroud)

现在这段代码也应该适用于 CSV,但是当我将剪贴板格式更改为我想要的格式时,应用程序将无法获取正确的数据。重要的是要知道我可以很好地获得选项卡式 Unicode,但不是我想要的 CSV。

Zoë*_*son 5

Excel 使用的 CSV 剪贴板格式是 ANSI 编码,而不是 Unicode。

通过转储 Excel 2007 剪贴板,启用 Unicode 的剪贴板包括:

  • CF_UNICODETEXT
  • “HTML 格式”
  • “富文本格式”
  • “XML 电子表格”

“XML 电子表格”和“HTML 格式”都有明确定义的表/行,因此从中提取数据应该不会太难。