Твой софтовый форум > Тематические форумы > Программирование

Сохранить из Delphi в XL

,

сохраноть таблицу XL с нужным размером с

Дата публикации: 08.01.2007 - 19:44
korzhavin
С Рождеством Вас.
Помогите с проблемой. Надо из StringGrid в Delphi сохраноть таблицу XL с нужным размером столбца.
Знаю, что (Макрос записан так /Columns("E:E").EntireColumn.AutoFit/) тут для колонки "Е".
У меня 4 колонки.
Вот мое сохранение:
QUOTE
procedure TForm1.Button9Click(Sender: TObject);
begin
R:=StringGrid1.RowCount;
C:=StringGrid1.ColCount;
TabGrid:=VarArrayCreate([0,R-1,0,C-1],VarOleStr);
for x:=0 to r-1 do
for y:=0 to C-1 do TabGrid[x,y]:=StringGrid1.Cells[y,x];
IIndex:=1;
XLApp.Connect;
XLApp.WorkBooks.Add(xlWBatWorkSheet,0);
WorkBk:=XLApp.WorkBooks.Item[IIndex];
WorkSheet:=WorkBk.WorkSheets.Get_Item(1) as _WorkSheet;

  // надо тут поменять вот только как?

with WorkSheet.Range['A1',Worksheet.Cells.Item[R,C]] do
begin
Formula:=TabGrid;
Borders[xlEdgeTop].LineStyle:=xlContinuous;
Borders[xlEdgeTop].Weight:=xlThin;
Borders[xlEdgeTop].ColorIndex:=xlAutomatic;
Borders[xlEdgeLeft].LineStyle:=xlContinuous;
Borders[xlEdgeLeft].Weight:=xlThin;
Borders[xlEdgeLeft].ColorIndex:=xlAutomatic;
Borders[xlEdgeRight].LineStyle:=xlContinuous;
Borders[xlEdgeRight].Weight:=xlThin;
Borders[xlEdgeRight].ColorIndex:=xlAutomatic;
Borders[xlEdgeBottom].LineStyle:=xlContinuous;
Borders[xlEdgeBottom].Weight:=xlThin;
Borders[xlEdgeBottom].ColorIndex:=xlAutomatic;
Borders[xlInsideVertical].LineStyle:=xlContinuous;
Borders[xlInsideVertical].Weight:=xlThin;
Borders[xlInsideVertical].ColorIndex:=xlAutomatic;
Borders[xlInsideHorizontal].LineStyle:=xlContinuous;
Borders[xlInsideHorizontal].Weight:=xlThin;
Borders[xlInsideHorizontal].ColorIndex:=xlAutomatic;
end;
for x:=1 to r do
begin
if x mod 2=0 then
worksheet.Range['a'+inttostr(x),'d'+inttostr(x)].Interior.ColorIndex:=0;
CODE
worksheet.Range['a'+inttostr(x),'d'+inttostr(x)].EntireColumn.AutoFit;

end;
if savedialog1.Execute
then
XLApp.Workbooks[1].SaveAs( savedialog1.FileName , emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,0,emptyparam,
emptyparam,emptyparam,emptyparam,emptyparam,0);
XLApp.Quit;
XLApp.Disconnect;
TabGrid:=Unassigned;
end;

Разобрался - пользуйтесь.
Korich
я юзаю компоненты от компании EMS, для экселя он называется EMS Data Export for DB2, подробно можешь почитать здеся а также качнуть:

лекарство здесь:
https://softoroom.org/...dpost&p=141701
korzhavin
Спасибо но это немного не то.
Мне надо строчку дописать для нужного сохранения.
Когда использую WorkSheets.Column.AutoFit , точно указать не получается, выдает ошибку при сохранении.
Korich
опиши плиз точнее на каком месте стопорит, после первой строчки или колонки или даже первой ячейки?
korzhavin
with WorkSheet.Range['A1',Worksheet.Cells.Item[R,C]] do
with WorkSheet.Range['A1',Worksheet.Columns.
EntireColumn.AutoFit] do
Начнет ругаться после нажатия. Знаю точно что можно написать.
Надо при сохранении автоматически создавать ширину ячейки по длинне слова (данных).
Препод показал как но быстор и тут же стер.
Korich
ето понятно чё после нажатия кнопки smile.gif))
там за долюсикунды куча операций проходит dry.gif
напиши
CODE

nom := 0;
with WorkSheet.Range['A1',Worksheet.Cells.Item[R,C]] do begin
    ShowMessage ("Проход № " + inttostr (nom+1) );
    with WorkSheet.Range['A1',Worksheet.Columns.EntireColumn.AutoFit] do
end

знаки сам раставь (. и wink.gif - а то я учил C++Builder (тот же принцип)
и сажи на каком проходе стопорнуло

QUOTE
Надо при сохранении автоматически создавать ширину ячейки по длинне слова (данных).
Препод показал как но быстор и тут же стер.

просмотри массив по колонкам а не по строкам и задай максимальное колво символов + 10 (ну или др).
korzhavin
Ругается на

QUOTE
with WorkSheet.Range['A1',Worksheet.Columns.EntireColumn.AutoFit] do

Выпадает Проход №1 "ок" , а потом. Строка писана не коректно.
Korich
скорей всего неправильно работает функция Worksheet.Columns.EntireColumn.AutoFit
если симантика функции WorkSheet.Range [ячейка, размер]
то в начале процедуры нажатия на кнопку сделай функцию которая в одномернный массив [1..4] будет заносить максимальную длину текста по каждой колонки будет у тебя например mas [4] {30, 23, 18, 31} - но если ты передаш ети размеры вместо Worksheet.Columns.EntireColumn.AutoFit то ето будет немного неправильно потомучто ето будет в пикселах так что умнож на 6 и подставляй
получится у тя
CODE

with WorkSheet.Range['A1',Worksheet.Cells.Item[R,C]] do
    with WorkSheet.Range['A1',mas[i]] do
         i:=i+1;
         ......

нахождение максимума написать нетрудно
ща могу тока идеи давать
у мя просто нема Delphi наработе
korzhavin
QUOTE
with Worksheet.Columns.EntireColumn.AutoFit do

Эту строчку надо доработать.
Одна строчка житья недает. Кружива плести неохота.


Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке: Сохранить из Delphi в XL
SoftoRooM © 2004-2024