day & night

Сохранить из Delphi в XL, сохраноть таблицу XL с нужным размером с
Дата обновления: , перейти к новому сообщению
#1
korzhavin



Бывалый
*

Группа: Пользователи
Сообщений: 33
Регистрация: 18.12.2005
Пользователь №: 88.405


Респектов: 1
-----X----


Предупреждений:


С Рождеством Вас.
Помогите с проблемой. Надо из 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;

Разобрался - пользуйтесь.
User is offline
Go topGo end
 

Ответов(1 - 8)
8.01.2007 - 14:50
#2
Korich



Game Developer
Group Icon

Группа: Наши Люди
Сообщений: 2.324
Регистрация: 11.04.2006
Из: ниоткуда
Пользователь №: 13


Респектов: 671
-----XXXX-




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

лекарство здесь:
https://softoroom.org/...dpost&p=141701
User is offline
Go topGo end
8.01.2007 - 15:23
#3
korzhavin



Бывалый
*

Группа: Пользователи
Сообщений: 33
Регистрация: 18.12.2005
Пользователь №: 88.405


Респектов: 1
-----X----


Предупреждений:


Спасибо но это немного не то.
Мне надо строчку дописать для нужного сохранения.
Когда использую WorkSheets.Column.AutoFit , точно указать не получается, выдает ошибку при сохранении.
User is offline
Go topGo end
8.01.2007 - 15:36
#4
Korich



Game Developer
Group Icon

Группа: Наши Люди
Сообщений: 2.324
Регистрация: 11.04.2006
Из: ниоткуда
Пользователь №: 13


Респектов: 671
-----XXXX-




опиши плиз точнее на каком месте стопорит, после первой строчки или колонки или даже первой ячейки?
User is offline
Go topGo end
8.01.2007 - 15:49
#5
korzhavin



Бывалый
*

Группа: Пользователи
Сообщений: 33
Регистрация: 18.12.2005
Пользователь №: 88.405


Респектов: 1
-----X----


Предупреждений:


with WorkSheet.Range['A1',Worksheet.Cells.Item[R,C]] do
with WorkSheet.Range['A1',Worksheet.Columns.
EntireColumn.AutoFit] do
Начнет ругаться после нажатия. Знаю точно что можно написать.
Надо при сохранении автоматически создавать ширину ячейки по длинне слова (данных).
Препод показал как но быстор и тут же стер.
User is offline
Go topGo end
8.01.2007 - 16:38
#6
Korich



Game Developer
Group Icon

Группа: Наши Люди
Сообщений: 2.324
Регистрация: 11.04.2006
Из: ниоткуда
Пользователь №: 13


Респектов: 671
-----XXXX-




ето понятно чё после нажатия кнопки 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 (ну или др).
User is offline
Go topGo end
8.01.2007 - 17:07
#7
korzhavin



Бывалый
*

Группа: Пользователи
Сообщений: 33
Регистрация: 18.12.2005
Пользователь №: 88.405


Респектов: 1
-----X----


Предупреждений:


Ругается на

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

Выпадает Проход №1 "ок" , а потом. Строка писана не коректно.
User is offline
Go topGo end
8.01.2007 - 17:42
#8
Korich



Game Developer
Group Icon

Группа: Наши Люди
Сообщений: 2.324
Регистрация: 11.04.2006
Из: ниоткуда
Пользователь №: 13


Респектов: 671
-----XXXX-




скорей всего неправильно работает функция 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 наработе
User is offline
Go topGo end
8.01.2007 - 19:44
#9
korzhavin



Бывалый
*

Группа: Пользователи
Сообщений: 33
Регистрация: 18.12.2005
Пользователь №: 88.405


Респектов: 1
-----X----


Предупреждений:


QUOTE
with Worksheet.Columns.EntireColumn.AutoFit do

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

Topic Options
Сейчас: 11.05.2024 - 16:07
Мобильная версия | Lite версия