Вниз
Скачать: CL | DM;

TStringGrid -> MS Excel   Найти похожие ветки 

← →
Modus   (2003-09-08 13:34) [0]

Написал процедурку для перекидывания таблицы TStringGrid в MS Excel, но русские буквы перекидываются кракозябрами. Скажите, где с бубном бегать:


Procedure CopyStringGridToClipBoard(StringGrid: TStringGrid);
Var S: String;
t,r: Integer;
Begin
S:="";
With StringGrid Do For t:=0 to RowCount-1 Do
Begin
For r:=0 to ColCount-1 Do IF r = ColCount-1 then S:=S+Cells[r,t] else S:=S+Cells[r,t]+#9;
S:=S+#13#10;
End; {For}
ClipBoard.AsText:=S;
End;


← →
Palladin ©   (2003-09-08 13:40) [1]

вокруг DDE бегай
xlApp:=CreateOLEObject("Excel.Application");
...
S:="";
With StringGrid Do For t:=0 to RowCount-1 Do
Begin
For r:=0 to ColCount-1 Do IF r = ColCount-1 then S:=S+Cells[r,t] else S:=S+Cells[r,t]+#9;
S:=S+#13#10;
End; {For}
xlDDE:=TDDEClientConv.Create(nil);
xlDDE.SetLink("EXCEL", strSheetName);
xlDDE.PokeData(OLEVariant(xlApp.Range[Col1+Row1,Col2+Row2]).Address[ReferenceStyle:=xlR1C1], pchar(s));
xlDDE.free;


← →
Modus   (2003-09-08 13:46) [2]

Ну так ведь это должен быть Excel запущен!
И где взять strSheetName?
Какого типа TDDEClient и xlApp ?

Никак нельзя сделать через буфер обмена?


← →
Palladin ©   (2003-09-08 13:50) [3]


> Ну так ведь это должен быть Excel запущен!

А ты умеешь вставлять в эксель буффер без запуска экселя?


> И где взять strSheetName?

Это переменная содержащая имя листа, непонятно чтоли?


> Какого типа TDDEClient и xlApp ?

TDDEClient это и есть тип. xlApp:OleVariant;


> Никак нельзя сделать через буфер обмена?

Наверно можно...


← →
VMcL ©   (2003-09-08 13:56) [4]

>Modus (08.09.03 13:34)

Если система Win2K, то это скорее всего не твой глюк.
Нужно в Excel"е выбирать "Специальная вставка", а потом в списке "Текст". Второй вариант: при копировании (то есть ClipBoard.AsText:=S;) раскладка клавы должна быть русская.


← →
dima_shapkin ©   (2003-09-08 13:57) [5]

Перед копированием выстави русскую раскладку...

const
RUS_KeyboardLayout = "00000419";
var
kln : PChar;

GetMem(kln, 100);
GetKeyboardLayoutName(kln);
if (kln <> RUS_KeyboardLayout)then
LoadKeyboardLayout(RUS_KeyboardLayout,KLF_ACTIVATE);
// Копируй

// Выстави обратно раскладку


← →
Modus   (2003-09-08 14:02) [6]

2VMcL © (08.09.03 13:56) [4]
dima_shapkin © (08.09.03 13:57) [5]

Да у меня XP. Класс, спасибо, помогло.
Только переводить назад не надо, он почему-то обратно сам слетает после копироваться в ClipBoard.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.015 c
6-58809
ALaKO
2003-07-17 11:43
2003.09.18
опять Tembeddewb


11-58605
Alexander
2003-01-08 15:18
2003.09.18
Снова про ScreenSaver - так и не получил ответа на свой вопрос:


3-58574
Lamer_of_Delphi
2003-08-27 10:48
2003.09.18
Изменение записи...


14-58911
Карлсон
2003-08-28 19:17
2003.09.18
лето подходит к концу.


14-58827
Cyber Chaynik
2003-08-30 03:09
2003.09.18
Какая мышь лучше ?




   Наверх