Форум: "Основная";
Текущий архив: 2003.09.18;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.01 c