Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Добавление данных в Exel

290
07 февраля 2011 года
Patr1ot
458 / / 09.02.2008
Доброго времени суток. Столкнулся с проблеммой.

Функция toExelCell добавляет данные в книгу Exel, заполняя 1,2,3 столбцы данными, проблема в том, что toExelCell постоянно не добавляет данные (то есть удлиняя столбцы), она их заменяет. Естественно потому что параметр Row при каждом добавление данных один и тот же. Через что можно реализовать работу функции toExelCell так чтобы параметр Row начинался с последней пустой ячейки столбца.


Функция в студию:

 
Код:
void __fastcall TForm1::toExcelCell(int Row,int Column, AnsiString data)
{
  try {
    Variant  cur = Sh.OlePropertyGet("Cells", Row,Column);
    cur.OlePropertySet("Value", data.c_str());
  } catch(...) { ; }
}
1
07 февраля 2011 года
kot_
7.3K / / 20.01.2000
Необходимо получить последнюю использованную строку - а затем выполнять приращение.
290
07 февраля 2011 года
Patr1ot
458 / / 09.02.2008
Цитата: kot_
Необходимо получить последнюю использованную строку - а затем выполнять приращение.



я об этом и спрашиваю,как ее получить?
есть вариант сохранить номер строки после использования цикла, который собственно и добавляет данные в Книгу
в отдельный файл, и постоянно его перезаписывать. Но мне кажется есть проще вариант.

1
07 февраля 2011 года
kot_
7.3K / / 20.01.2000
Цитата: Patr1ot
я об этом и спрашиваю,как ее получить?
есть вариант сохранить номер строки после использования цикла, который собственно и добавляет данные в Книгу
в отдельный файл, и постоянно его перезаписывать. Но мне кажется есть проще вариант.



 
Код:
XLSheet.OlePropertyGet("Cells").OlePropertyGet("SpecialCells",xlCellTypeLastCell).OleProcedure("Activate");
int row_last = MSExcel.OlePropertyGet("ActiveCell").OlePropertyGet("Row");
290
08 февраля 2011 года
Patr1ot
458 / / 09.02.2008
Еще одина проблема


 
Код:
App.OlePropertyGet("WorkBooks").OleProcedure("add");
   Sh = App.OlePropertyGet("Worksheets").OlePropertyGet("Item",1);

при таком методе открытия, пишу данные в Excel, но по непонятной мне причине, описание:

Данные выгружаются в столбец , последняя № последней строки 100, номер последней строки запомнил так:

 
Код:
Sh.OlePropertyGet("Cells").OlePropertyGet("SpecialCells",xlCellTypeLastCell).OleProcedure("Activate");
        row_last = App.OlePropertyGet("ActiveCell").OlePropertyGet("Row");

перед следующей выгрузкой указываю начало строки №100, и вот чудеса почему то после второй выгрузки также 100 строк, строки первой выгрузки от 0 - 100 становятся пустыми, а строки второй выгрузки от 100 - 200 заполнеными, и т.д. после 3-й выгрузки строки от 0-100 и от 100-200 пустые а строки от 200-300 заполнены данными 3-й выгрузки.
в чем косяк непоку понять книга и файл одни и теже.


Сохраняю вот так:
 
Код:
App.OlePropertySet("DisplayAlerts", false);
    AnsiString put = GetCurrentDir()+"\\Base\\"+Label5->Caption+".xlsx";
App.OlePropertyGet("WorkSheets",1).OleProcedure("SaveAs",put.c_str());
 App.OlePropertyGet("WorkSheets",1).OleProcedure("Quit");
1
08 февраля 2011 года
kot_
7.3K / / 20.01.2000
Вместо того, что бы писать такое количество букв в форум, достаточно запустить отладчик и проверить, в какие на самом деле ячейки записываются данные. Для этого всего навсего надо установить точку останова там где это происходит.
290
08 февраля 2011 года
Patr1ot
458 / / 09.02.2008
Цитата: kot_
Вместо того, что бы писать такое количество букв в форум, достаточно запустить отладчик и проверить, в какие на самом деле ячейки записываются данные. Для этого всего навсего надо установить точку останова там где это происходит.



Нашел...

Код:
if(File!="")

     {
     AnsiString ff = "Rodonitov_19_Enter" ;
    App.OlePropertyGet("WorkBooks").OleProcedure("Open",ff.c_str());
    Sh=App.OlePropertyGet("WorkSheets",1);
   Sh.OlePropertyGet("Activate");

     

     }
  else
   {
   App.OlePropertyGet("WorkBooks").OleProcedure("add");
   Sh=App.OlePropertyGet("WorkSheets",1);
   Sh.OlePropertyGet("Activate");

   
     

    }
  } catch(...) {
    Application->MessageBox("Îøèáêà îòêðûòèÿ êíèãè Microsoft Excel!","Îøèáêà",MB_OK+MB_ICONERROR);
    Label10->Caption=File+3;
  }


У меня постоянно добавляется новая книга, OleProcedure("add");. Почему то никак не работает открытие книги OleProcedure("Open",ff.c_str())
я и полностью имя файла с указанием пути и расширение указывал, не хочет открывать книгу и все, хот по монитору тресни:). Почему не могу понять.

Вся процедура открытия книги Excel:

Код:
void __fastcall TForm1::ExcelInit(AnsiString File)
{
  try {

   App=Variant::GetActiveObject("Excel.Application");
  } catch(...) {
     try {

      App=Variant::CreateObject("Excel.Application"); } catch (...) {
      Application->MessageBox("Íåâîçìîæíî îòêðûòü Microsoft Excel!"
      " Âîçìîæíî ýòîãî ïðèëîæåíèÿ íà êîìïüþòåðå íå óñòàíîâëåíî.","Îøèáêà",MB_OK+MB_ICONERROR);
  }
  }
  try {

    if(File!="")

   {
  AnsiString ff = "Rodonitov_19_Enter" ;
  App.OlePropertyGet("WorkBooks").OleProcedure("Open",ff.c_str());
  Sh=App.OlePropertyGet("WorkSheets",1);
  Sh.OlePropertyGet("Activate");

     

     }
  else
   {
   App.OlePropertyGet("WorkBooks").OleProcedure("add");
   
   Sh=App.OlePropertyGet("WorkSheets",1);
   Sh.OlePropertyGet("Activate");

 
     

    }
  } catch(...) {
    Application->MessageBox("Îøèáêà îòêðûòèÿ êíèãè Microsoft Excel!","Îøèáêà",MB_OK+MB_ICONERROR);
    Label10->Caption=File+3;
  }

}
290
08 февраля 2011 года
Patr1ot
458 / / 09.02.2008
Ссори... ступил жестко... все из-за условия if(File!="")...

Вот я мудак...
290
08 февраля 2011 года
Patr1ot
458 / / 09.02.2008
Еще вопросик

Как отсеять повторяющиеся значения в ячейках.
Тупо сравнивать значения? Это накладно на процесс работы приложения.
Может кто знает решение по проще.

задача. Столбец, из него нужно удалить повторяющиеся значения, причем удалить не просто значение ячейки а сразу всю строку со сдвигом вверх.

Гугл и поиск результатов не дали.
1
08 февраля 2011 года
kot_
7.3K / / 20.01.2000
 
Код:
XLSheet.OlePropertyGet("Rows","7:7").OleProcedure("Select");
MSExcel.OlePropertyGet("ActiveCell").OleProcedure("Delete").OlePropertyGet(""Shift","xlUp");

удалит седьмую строку.
 
Код:
XLSheet.OlePropertyGet("Rows","7:15").OleProcedure("Select");
MSExcel.OlePropertyGet("ActiveCell").OleProcedure("Delete").OlePropertyGet(""Shift","xlUp");

удалит строки с седьмой по пятнадцатую.

Код не тестировался, может содержать несущественные ошибки.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог