![]() |
Excel + буфер обмена
Вложений: 3
Необходимо написать на Delphi небольшую программку, которая могла бы помещать в буфер обмена данные так, как будто они были скопированы туда из двух (трех, четырех и т.д.) соседних ячеек Excel'я
/excel.gif/ после вставки содержимого из буфера (скопированного из Excel) в другую программу - получаем следующее: /progok.gif/ т.е. программа понимает, что текст скопирован из разных ячеек и раскидывает текст в разные поля когда же моя программа генерирует текст и помещает его в буфер, то после вставки имеем следующее: /prog.gif/ т.е. программа не раскидала текст по полям :( после разбора содержимого буфера (скопированного из Excel) обнаружил, что символ разделитель ячеек - Tab - #9, а в конец строки добавляется символ переноса строки - #10#13... аналогично формирую свою строку - Код:
'text1'+#9+'text2'+#10#13может кто помочь? |
Опиши какими символьными типами ты пользуешься для хранения-передачи данных, и кусок кода покажи, где у тебя не получается выцепить данные правильно. ИМХО тут в типе STRING заморочка.
|
>'text1'+#9+'text2'+#10#13
А попробуй вот так, если я не туплю, конечно. 'text1'+'#9'+'text2'+'#10#13' Ну а у меня сейчас вот так получилось в С++ Билдер 5 и вставлял в офис2003 Edit1->Text = Edit2->Text+" "+Edit3->Text; // в ковычках 5 пробелов Edit1->SetFocus(); Edit1->CopyToClipboard(); Ну а в Делфи просто заменяешь -> на . " на ' |
Цитата:
Код:
Clipboard.SetTextBuf(PChar( eBuilding.Text+#9+#9+AnsiUpperCase(cbStreetsList.Text)+#9+#9+AnsiUpperCase(cbCitiesList.Text)+#9+#9+eIndex.Text+#10#13))по два #9 - это так и надо, ибо надо вставлять данные в поля через 2 для проверки того, как передаются поля из Excel'a в буфер и из моей проги, использовал следующий код: Код:
procedure TZipForm.Button2Click(Sender: TObject);Цитата:
Цитата:
|
а не пробовал забирать данные вот так: Clipboard.AsText; ? А проверочку содержимого так и так нужно делать. Вроде PChar (указатель с нулем вконце) не должон влиять на получаемы/запихиваемый в буфер текст.
|
Цитата:
|
Да, фигнню я напорол с #9. Невыспался был. Звиняй.
>может проблема в том, что текст в буфере НЕ надо принимать за текст? Но все таки Ехсель должен что то пихать в буфер помимо текста. Ворд по Ехселевскому буферу сразу таблицу рисует. У класса Clipbord помимо функции GetTextBuf (по сути, то что у тебя), есть и GetComponent. По GetAsHandle(CF_TEXT) ты выдергиваешь только текст (только, то что в буфере отформатировано как текст), но там одновремено, может быть и CF_BITMAP и CF_METAFILEPICT и CF_COMPONENT и др. А как сделать я не знаю. Это были так мысли вслух, чисто: "Я тАк думаю"(с) |
| Часовой пояс GMT +4, время: 10:34. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.