Форум: "Основная";
Текущий архив: 2003.01.16;
Скачать: [xml.tar.bz2];
ВнизStringGrid в Word Найти похожие ветки
← →
AlekseyK (2003-01-03 11:37) [0]Привет. Подскажите, как данные из StringGrid"а записать в word"овский документ.
← →
Ops (2003-01-03 11:41) [1]1. Создаешь объект worda.
2. Пишешь в файл
3. Сохраняешь его
4. Закрываешь word
Если без worda шукай спец компоненты...
← →
alvin (2003-01-03 11:47) [2]tabl:=range.tables.add()
и в цикле присваиваешь значения каждой ячейке
(вот только работает это достаточно медленно)
tabl.Cell(i,j).Width:=50;
tabl.Cell(i,j).Range.Text:=StringGrid1.Cells[0,i];
← →
alvin (2003-01-03 11:50) [3]tabl:=range.tables.add()
и в цикле присваиваешь значения каждой ячейке
(вот только работает это достаточно медленно)
for i:=0 to StringGrid1.RowCount-1 do begin
// задаем значение ячеек в 4х столбцах
tabl.Cell(i+1,1).Width:=50;//ширина столбца
tabl.Cell(i+1,1).Range.Text:=StringGrid1.Cells[0,i];
tabl.Cell(i+1,2).Width:=150;
tabl.Cell(i+1,2).Range.Text:=StringGrid1.Cells[1,i];
tabl.Cell(i+1,3).Width:=170;
tabl.Cell(i+1,3).Range.Text:=StringGrid1.Cells[2,i];
tabl.Cell(i+1,4).Width:=80;
tabl.Cell(i+1,4).Range.Text:=StringGrid1.Cells[3,i];
← →
AlekseyK (2003-01-03 11:55) [4]А можно подробнее.
например так пишу
if savedg.execute=true then
begin
//создаю объект (как?)
assignfile или еще както просто я не встречался раньше с етим
если можно дайте маленький пример
← →
AlekseyK (2003-01-03 11:58) [5]tabl созданный объект word"a ?
← →
Ops (2003-01-03 12:05) [6]var
XLApp, WS, CountSheets : OLEVariant;
begin
XLApp := CreateOleObject("Excel.Application");
XLApp.Visible := True; // не показываем Excel
XLApp.Workbooks.Add(xlWBATWorksheet);
дальше точ то тебе сказали доб таблицу пихаем даннык и т.д.
Это идея. Доки под курой нет... Если уловил разберешся
← →
Ops (2003-01-03 12:13) [7]Нашел примерчик - надеюсь ща ктонибудь кинет тебе код полчучше...
V := CreateOleObject("Word.Application");
V.ShowMe;
V.WordBasic.FileNew;
V.WordBasic.FileSave;
← →
alvin (2003-01-03 15:47) [8]Если имеется Delphi выше 4 используй word из вкладки Servers. В четвертой Delphi надо использовать word_tlb. Вообще если хочещь - могу выслать готовые юниты с примерами (писать многовато)
← →
alvin (2003-01-03 16:12) [9]В delphi7 это примерно выглядит так.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, OleServer, Word2000;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Button1: TButton;
Word: TWordApplication;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
w_par:Paragraph;
w_tab:Table;
w_range:Range;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var i,j:integer;
begin
for i:=0 to StringGrid1.ColCount-1 do
for j:=0 to StringGrid1.RowCount-1 do
StringGrid1.Cells[i,j]:=IntToStr(i+j);
end;
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
Word:=TWordApplication.Create(nil);
Word.Visible:=true;
w_par:=Word.Documents.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam)
.Paragraphs.Add(EmptyParam);
w_range:=w_par.Range;
w_tab:=w_range.Tables.Add(w_range,StringGrid1.RowCount,StringGrid1.ColCount,EmptyParam,EmptyParam);
for i:=0 to StringGrid1.RowCount-1 do begin
w_tab.Cell(i+1,1).Width:=50;
w_tab.Cell(i+1,1).Range.Text:=StringGrid1.Cells[0,i];
w_tab.Cell(i+1,2).Width:=150;
w_tab.Cell(i+1,2).Range.Text:=StringGrid1.Cells[1,i];
w_tab.Cell(i+1,3).Width:=170;
w_tab.Cell(i+1,3).Range.Text:=StringGrid1.Cells[2,i];
w_tab.Cell(i+1,4).Width:=80;
w_tab.Cell(i+1,4).Range.Text:=StringGrid1.Cells[3,i];
{Word.Disconnect;}
end;
end;
end.
← →
AlekseyK (2003-01-03 17:17) [10]У меня Delphi6
Если не трудно то пришли пример на D6
Спасибо.
← →
alvin (2003-01-03 20:01) [11]Аналогично и для D6 (в палитре компонент найди на вкладке Servers WordApplication и положи его на форму и в свойстве name напиши Word и можешь напрямую копировать этот код). Кстати предложение о том чтобы выслать на мыло примеры все еще в силе
← →
AlekseyK (2003-01-07 16:47) [12]Все работает но ты прав ОЧЕНЬ МЕДЛЕНО
Что можно сделать для быстроты записи в Word или всетаки просто писать в txt файл
← →
alvin (2003-01-07 21:32) [13]Можешь запустить обработку таблицы отдельным потоком, тогда по крайней мере форма "жива" будет
← →
Alex Konshin (2003-01-07 22:43) [14]Можно через clipboard - это НАМНОГО быстрее, но это, естественно, изменяет содержимое clipboard, что, вообще говоря, не хорошо, так как пользователь этого может и не ожидать.
Там только есть хитрость с codepage, для 9x и для NT получается немного разный код. Когда-то давно я кидал этот код в FIDO и с тех пор он гуляет по всяким FAQ. Есть еще другая хитрость: excel может глючить, есть ему попытаться скормить слишком большой кусок, поэтому придется кормить его порциями в цикле.
Если не найдешь в Internet"e, то тогда подожди несколько часов, когда я буду дома и закину его сюда.
← →
Alex Konshin (2003-01-08 06:55) [15]Вот я и дома...
А вот и обещанный код:
procedure SetClipboardText( const AText : String );
var len, ulen : Integer;
hClip : THandle;
pClip : Pointer;
begin
if Win32Platform=VER_PLATFORM_WIN32_NT then
begin
len := Length(AText)+1;
ulen := len+len;
hClip := GlobalAlloc(GMEM_MOVEABLE,ulen);
if hClip=0 then raise Exception.Create(SysErrorMessage(GetLastError))
else
try
pClip := PWideChar(GlobalLock(hClip));
if pClip=nil then raise Exception.Create(SysErrorMessage(GetLastError))
else
begin
try
MultiByteToWideChar(CODEPAGE,0,PChar(AText),len,pClip,ulen);
finally
GlobalUnlock(hClip);
end;
Clipboard.SetAsHandle(CF_UNICODETEXT,hClip);
end;
except
GlobalFree(hClip);
raise;
end;
end
else
begin
Clipboard.SetTextBuf(PChar(AText));
SetClipboardData(CF_LOCALE,LANG_RUSSIAN);
end;
end;
← →
Alex Konshin (2003-01-08 07:04) [16]А, еще забыл добавить
const
CODEPAGE = 1251;
Да, естественно, я предполагал, что тест русский или английский.
Сразу отвечу, что системный дефолтный локале использовать не всегда хорошо, так он не всегда правильно установлен.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.01.16;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c