Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2012, 23:05   #1
betirsolt
Форумчанин
 
Регистрация: 20.07.2009
Сообщений: 421
По умолчанию Экспорт в Excel из Stringgrid

всем привет, делаю экспорт в Excel из Stringgrid вот код
Код:
procedure TForm1.ToolButton22Click(Sender: TObject);
var
 Colum:Variant;
 index,i:Integer;
begin
 e99:= CreateOleObject('Excel.Application');
 e99.Visible:=true;
 e99.Workbooks.Add(-4167);
 e99.Workbooks[1].workSheets[1].Name:='1';
 Colum:=e99.Workbooks[1].WorkSheets['1'].Columns;
 Colum1:=e99.Workbooks[1].WorkSheets['1'].Rows;
 Sheet1:=e99.Workbooks[1].WorkSheets['1'];


       for I := 1 to 10  do
            begin
                for j := 1 to 46 do
                        begin
            Sheet.Cells[j,i]:=stringgrid1_99.Cells[i,j];
                      end;
            end;

end;
вот так я экспортирую из stringgrid1_99 на первый лист в Excel, но мне нужно еще несколько stringgrid-ов экспортировать,и каждый из них на отдельный лист в excel, и так вопрос как экспортировать например stringgrid2_99 на второй лист в Excele, буду очень благодарен если поможете,заранее спасибо
Уважаемые модераторы, Я всячески стараюсь не нарушать правила сайта, будьте снисходительны
betirsolt вне форума Ответить с цитированием
Старый 13.04.2012, 08:16   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Оформи процедуру, в которую передавай параметры - имя листа и грид:
Код:
procedure TForm1.ToolButton22Click(Sender: TObject);
var
 Colum:Variant;
 index,i:Integer;

Procedure GoGoDolly(Nameshit:String,Grid);
var wshit:olevariant;
begin
 wshit:=e99.Workbooks.Add(-4167);
 wshit.Name:=Nameshit;
       for I := 1 to 10  do
            begin
                for j := 1 to 46 do
                        begin
                         wshit.Cells[j,i]:=grid.Cells[i,j];
                      end;
            end;

end;

begin
 e99:= CreateOleObject('Excel.Application');
 e99.Visible:=true;
 GoGoDolly('1',stringgrid1_99);
 GoGoDolly('2',stringgrid1_9910);
 GoGoDolly('3',stringgrid1_99500);
end;
Идея понятна?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.04.2012, 09:08   #3
betirsolt
Форумчанин
 
Регистрация: 20.07.2009
Сообщений: 421
По умолчанию

Понятна, но у меня несколько циклов должно быть и во всех разное for i=1 to x, но я попробую сделать так и взять максимальное х,
Код:
Procedure GoGoDolly(Nameshit:String;Grid:stringgrid);
а тут Grid:stringgrid тип Grid какой писать?а то ошибка
Уважаемые модераторы, Я всячески стараюсь не нарушать правила сайта, будьте снисходительны
betirsolt вне форума Ответить с цитированием
Старый 13.04.2012, 09:31   #4
betirsolt
Форумчанин
 
Регистрация: 20.07.2009
Сообщений: 421
По умолчанию

с типом Grid:stringgrid я догнал и написал Grid:Tstringgrid
Код:
Procedure GoGoDolly(Nameshit:String;Grid:TStringGrid);
var wshit:olevariant;
i,j:integer;
begin
 wshit:=e99.Workbooks.Add(-4167);
 wshit.Name:=Nameshit;
       for i := 1 to 10  do
            begin
                for j := 1 to 46 do
                        begin
                         wshit.Cells[j,i]:=grid.Cells[i,j];
                      end;
            end;

end;

begin
 e99:= CreateOleObject('Excel.Application');
 e99.Visible:=true;
 GoGoDolly('1',stringgrid1_99);
 GoGoDolly('2',stringgrid2_99);
 GoGoDolly('3',stringgrid3_99);
 GoGoDolly('4',stringgrid4_99);
 GoGoDolly('5',stringgrid5_99);
 GoGoDolly('6',stringgrid6_99);
 GoGoDolly('7',stringgrid7_99);
 GoGoDolly('8',stringgrid8_99);
 GoGoDolly('9',stringgrid9_99);
 GoGoDolly('10',stringgrid10_99);
 GoGoDolly('11',stringgrid11_99);
 GoGoDolly('12',stringgrid12_99);
 GoGoDolly('13',stringgrid13_99);
 GoGoDolly('14',stringgrid14_99);
 GoGoDolly('15',stringgrid15_99);
 GoGoDolly('16',stringgrid16_99);
 GoGoDolly('17',stringgrid17_99);
 GoGoDolly('18',stringgrid18_99);
end;
но теперь при экспорте он выдает недопустимое число параметров...и выдает он это сразу на первой строчке
Код:
GoGoDolly('1',stringgrid1_99);
что я не так сделал?
Уважаемые модераторы, Я всячески стараюсь не нарушать правила сайта, будьте снисходительны

Последний раз редактировалось betirsolt; 13.04.2012 в 09:38.
betirsolt вне форума Ответить с цитированием
Старый 13.04.2012, 12:48   #5
kashirin.p
Подтвердите свой е-майл
 
Регистрация: 04.04.2012
Сообщений: 37
По умолчанию

Цитата:
Сообщение от betirsolt Посмотреть сообщение
всем привет, делаю экспорт в Excel из Stringgrid вот код
Код:
procedure TForm1.ToolButton22Click(Sender: TObject);
var
 Colum:Variant;
 index,i:Integer;
begin
 e99:= CreateOleObject('Excel.Application');
 e99.Visible:=true;
 e99.Workbooks.Add(-4167);
 e99.Workbooks[1].workSheets[1].Name:='1';
 Colum:=e99.Workbooks[1].WorkSheets['1'].Columns;
 Colum1:=e99.Workbooks[1].WorkSheets['1'].Rows;
 Sheet1:=e99.Workbooks[1].WorkSheets['1'];


       for I := 1 to 10  do
            begin
                for j := 1 to 46 do
                        begin
            Sheet.Cells[j,i]:=stringgrid1_99.Cells[i,j];
                      end;
            end;

end;
вот так я экспортирую из stringgrid1_99 на первый лист в Excel, но мне нужно еще несколько stringgrid-ов экспортировать,и каждый из них на отдельный лист в excel, и так вопрос как экспортировать например stringgrid2_99 на второй лист в Excele, буду очень благодарен если поможете,заранее спасибо
А использование StringGrid обязательно? Просто если использовать TDBGRID, какой-нить dataset, можно использовать для экспорта компонент из JVCL (JvDBGridExcelExport). Посмотри пример, может пригодится1.rar
kashirin.p вне форума Ответить с цитированием
Старый 13.04.2012, 13:04   #6
betirsolt
Форумчанин
 
Регистрация: 20.07.2009
Сообщений: 421
По умолчанию

Цитата:
Сообщение от kashirin.p Посмотреть сообщение
А использование StringGrid обязательно? Просто если использовать TDBGRID, какой-нить dataset, можно использовать для экспорта компонент из JVCL (JvDBGridExcelExport). Посмотри пример, может пригодитсяВложение 49609
Обязательно, потому что у меня в проекте 14 тыс строк и все сделано со StringGrid -ом,уже все готово,осталось только экспортировать в эксель
Уважаемые модераторы, Я всячески стараюсь не нарушать правила сайта, будьте снисходительны
betirsolt вне форума Ответить с цитированием
Старый 13.04.2012, 14:28   #7
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Что есть "при экспорте"? при щелчке по кнопке в запущенной (и скомпилированной, ессно) программе или во время компиляции?

Если компиляции, то:
Перепроверьте, чтобы в заголовке процедуры параметры отделялись ;
а при вызове ,
Проверьте правильность расстановки символа одинарной кавычки.

Если в запущенной - то проверяйте тот код как у Вас работало с экспортом в 1 лист с тем что сейчас, ищите несоответствие.

Если у Вас разное количество обходов цикла, то эти величины тоже ведь можете передавать в процедуру, объявите параметры, да передавайте. Плюс советую обратить внимание, что в гриде ячейки нумеруются от 0 (и количество фиксированных сюда входит), а в экселе не знаю точно.. Можно вообще сделать чтобы цикл заканчивался не по числу, а по
Grid.СolСount - 1 и Grid.RowCount - 1 , т.е. по последнему индексу колонок и строк соответственно.

Stilet, Nameshit улыбнуло ))
phomm вне форума Ответить с цитированием
Старый 13.04.2012, 14:51   #8
betirsolt
Форумчанин
 
Регистрация: 20.07.2009
Сообщений: 421
По умолчанию

все компилиться без ошибок и работает пока не нажмешь на кнопку экспорт,я ставил точку прерывания и смотрел и ошибка вылетает на этой строчке
Код:
GoGoDolly('1',stringgrid1_99);
вроде все запятые и точки проставлены правильно,у меня точно как я выложил на форуме все там,я без понятия что это может быть
Уважаемые модераторы, Я всячески стараюсь не нарушать правила сайта, будьте снисходительны
betirsolt вне форума Ответить с цитированием
Старый 13.04.2012, 15:45   #9
Karabash
Форумчанин
 
Регистрация: 26.07.2009
Сообщений: 216
По умолчанию

Вылетает не на этой строке, а на предыдущей. Уж так устроен отладчик в Delphi, что останавливается на строке, которая идет следом за той, где произошла ошибка.
А эта строка есть:
Код:
  wshit:=e99.Workbooks.Add(-4167);
В ней и надо копать.
Karabash вне форума Ответить с цитированием
Старый 13.04.2012, 16:21   #10
betirsolt
Форумчанин
 
Регистрация: 20.07.2009
Сообщений: 421
По умолчанию

предыдущая строка это
Код:
e99.Visible:=true;
и она проходит нормально и книга у меня появляется, вообще для меня в этом коде много не понятных моментов,например
Код:
 e99.Workbooks.Add(-4167);
зачем мне каждый раз создавать новую книгу?мне надо в одной книге добавлять листы и по очереди экспортировать на листы,по моему в этом коде нигде не добавляется новый лист,ребята помогите серьезно, тут же есть знающие по любому
Уважаемые модераторы, Я всячески стараюсь не нарушать правила сайта, будьте снисходительны
betirsolt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Экспорт из StringGrid в Word Polotenchik Общие вопросы Delphi 12 23.09.2011 23:22
Экспорт данных из StringGrid в Excel demiancz Общие вопросы Delphi 2 21.02.2011 22:54
экспорт из StringGrid в Word Бусурманин хлоров Общие вопросы Delphi 1 11.12.2010 09:20
Экспорт из StringGrid в MS Office Excel Kamikadze_666 Общие вопросы C/C++ 0 26.03.2009 08:53
Экспорт из Access в Excel, Экспорт из отчётов в таблицу Excel Kissedbythegod Microsoft Office Access 1 31.05.2008 22:15