C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: StringGrid -> Excel  (Прочитано 3400 раз)
chooker
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 5


StringGrid -> Excel
« : 24 Декабрь 2014, 08:35:02 »

Приветствую.

Люди подскажите пожалуйста.
Есть файл xls(шаблон) с одним листом, туда вставляются данные из ячеек StringGrid. Отдельно, по клику на строку в StringGrid, файл xls открывается и шаблон заполняется.
Нужно сделать чтобы при нажатии на кнопку открывался xls файл добавлялись листы в зависимости от количества строк в StringGrid, шаблон первого листа копировался на все листы и данные из строк StringGrid вставлялись в шаблоны листов.
Помогите.
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг


Сказали спасибо: +350/-28
Offline

Сообщений: 2181


Re: StringGrid -> Excel
« Ответ #1 : 24 Декабрь 2014, 15:51:17 »

Код будет или "напишите за меня, мне очень срочно надо"?
Записан
chooker
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 5


Re: StringGrid -> Excel
« Ответ #2 : 25 Декабрь 2014, 06:45:47 »

Ну как бы кода то и нету.

Вот что есть пока :
событие по нажатию на ячейки в 6 столбце.

void __fastcall TForm1::StringGrid1Click(TObject *Sender)
{
   int i,x,y,row;

   row = StringGrid1->RowCount;

   x = StringGrid1->Col;
   y = StringGrid1->Row;


   for(int i = 1; i
     if(x==6 && y==i){

   Variant Excel;
   Excel=CreateOleObject("Excel.Application");
   Excel.OlePropertyGet("Workbooks").OlePropertyGet("Open", "c:\\mail\\10x10.xls");
   Excel.OlePropertySet("Visible", true);
   Excel.OlePropertyGet("Range", "R10").OlePropertySet("Value",(StringGrid1->Cells[1]).c_str());
   Excel.OlePropertyGet("Range", "R13").OlePropertySet("Value",(StringGrid1->Cells[4]
).c_str());
   Excel.OlePropertyGet("Range", "R15").OlePropertySet("Value",(StringGrid1->Cells[5]).c_str());
   Excel.OlePropertyGet("Range", "R17").OlePropertySet("Value",(StringGrid1->Cells[3]
).c_str());
   Excel.OlePropertyGet("Range", "B17").OlePropertySet("Value",(StringGrid1->Cells[3]).c_str());
     }

   }
}
но так как таблица в StringGrid может иметь пару сотен строк не удобно открывать по одному документу. Хочу сделать чтобы открывалась книга Excel с "пару сотен" страниц и пускать всю книгу на печать.
Как вариант можно пускать на печать без открытия окна excel, но хочется визуально отслеживать.
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг


Сказали спасибо: +350/-28
Offline

Сообщений: 2181


Re: StringGrid -> Excel
« Ответ #3 : 25 Декабрь 2014, 09:54:49 »

Цитата: chooker от 25 Декабрь 2014, 06:45:47

   Excel.OlePropertySet("Visible", true);
Зачем? Чтобы еще медленней работало?
Цитата: chooker от 25 Декабрь 2014, 06:45:47
но так как таблица в StringGrid может иметь пару сотен строк не удобно открывать по одному документу. Хочу сделать чтобы открывалась книга Excel с "пару сотен" страниц и пускать всю книгу на печать.
Как вариант можно пускать на печать без открытия окна excel, но хочется визуально отслеживать.
Давай разберемся:
1. Документ = Книга = файл.
2. Книга может содержать одну или более вкладок (листов).
3. Вкладка может печататься на 1 или более страницах.

Если вы откроете пару сотен документов, компьютер просто умрет.
Документ с парой сотен листов (вкладок) - похороны здравого смысла.

Давайте поступим так - вы четко и подробно расскажете, что НАДО сделать, а не то, что вы ПЫТАЕТЕСЬ сделать.

Нет проблем запустить Эксель, создать/открыть документ, создать/обратиться к вкладкам, внести/изменить данные. Проблема в том, что у вас явно проблема с логикой работы программы.
Записан
chooker
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 5


Re: StringGrid -> Excel
« Ответ #4 : 25 Декабрь 2014, 10:01:24 »

В общем программа печати данных(кому и куда) на конвертах.
Данные загружаются из excel документа в StringGrid. В каждой строке индекс, индекс, кому и адрес. Таких строк от 10 и до 200 (к примеру).
Сейчас программа выводит данные в шаблон excel и потом уже из самого excel на принтер.
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг


Сказали спасибо: +350/-28
Offline

Сообщений: 2181


Re: StringGrid -> Excel
« Ответ #5 : 25 Декабрь 2014, 10:17:56 »

Зачем так усложнять? Подцепить любой генератор отчетов и всё.
Записан
chooker
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 5


Re: StringGrid -> Excel
« Ответ #6 : 25 Декабрь 2014, 11:01:59 »

Да. Был такой вариант. Но так как с билдером С++ разбираюсь всего две недели, решил сделать через xls. Хорошо, спасибо. Буду пробовать через отчеты.
Записан
chooker
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 5


Re: StringGrid -> Excel
« Ответ #7 : 25 Декабрь 2014, 11:35:51 »

Хотя при печати на разных принтерах по разному печатает, в смысле немного смещает шаблон и приходится подгонять. Через генератор отчетов же не должно быть смещения ?
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг


Сказали спасибо: +350/-28
Offline

Сообщений: 2181


Re: StringGrid -> Excel
« Ответ #8 : 25 Декабрь 2014, 15:41:57 »

Цитата: chooker от 25 Декабрь 2014, 11:35:51
Хотя при печати на разных принтерах по разному печатает, в смысле немного смещает шаблон и приходится подгонять. Через генератор отчетов же не должно быть смещения ?
Не должно - ты же предварительно выставляешь границы страницы и положение элементов на странице.
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: StringGrid -> Excel
« Ответ #9 : 26 Декабрь 2014, 08:04:53 »

Да можно и через Excel реализовать, но точно не надо добавлять вкладки и копировать шаблон. Можно просто последовательно выводить данные на одну и ту же вкладку (в соответствующие поля) и направлять на печать, тем более, что задачи принтер все равно обрабатывает последовательно. Можно и по-другому сделать: создать в книге 2 вкладки - одна будет содержать "базу данных", загружаемую из твоего StringGrid, а другая содержит шаблон конверта. Загружаешь сначала все данные на первую вкладку, затем выполняешь макрос в книге, который последовательно выводит данные в шаблон на 2-й вкладке и затем на принтер. Я б так сделал.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.04 секунд. Запросов: 22.