Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.18;
Скачать: 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 вся ветка

Текущий архив: 2003.09.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.019 c
1-58658
Dimich1978
2003-09-05 08:31
2003.09.18
Помогите считать из файла данные.


4-58978
Serhio
2003-07-18 16:14
2003.09.18
Консольные проги


3-58588
Cuckoo
2003-08-26 18:40
2003.09.18
ПОМОГИТЕ НОВИЧКУ!!!


14-58856
Жук
2003-08-26 11:22
2003.09.18
Хранение СД-болванок


1-58739
igp
2003-09-07 01:55
2003.09.18
Строка с мультифильтром