ExcelLib вставка

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

ExcelLib вставка

Сообщение galover »

Можно ли с помощью ExcelLib делать вставку матрицы в Excel не заменой, а именно вставкой? Проблема такая: есть заголовок таблицы и в конце таблицы список подписей. Так вот этот список подписей я хочу нарисовать заранее. Задача добиться вставки матрицы не заменяя эти подписи (в Excel есть спец. опция вставки для такого случая). Можно ли добиться желаемого?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: ExcelLib вставка

Сообщение edward_K »

ну проще разобраться с формированием стандартных xlt отчетов - по быстродействию может и проиграете, но писать с подножием удобней. Самое главное в шаблоне правильно поинаименовать поля :). Макрос для LoadReport' слижите скажем из печати акта на списание. Как работать с GalRepDesiner найдете в доке.

Код: Выделить всё


после заполнения Gal_TblSheet

.procedure MyxlAddRangeNameVar(w :string ; wrow:longint) ;
begin
 xlAddRangeName(w,wrow,3,wrow,3)
 end.
//================
 if not xlSetActiveSheetByName('Gal_VarSheet')
 { message('Не найден лист "Gal_VarSheet"') ; 
  flOk:=false;
 }
 if flOk
 {
  xlSetCellStringValue(chr(39)+Организация,2,3,2,3);
  xlSetCellStringValue(chr(39)+Склад,3,3,3,3);
  xlSetCellStringValue(chr(39)+СУММА_ПРОПИСЬЮ,4,3,4,3);
  xlSetCellStringValue(ИТОГО,5,3,5,3);
  xlSetCellStringValue(string(itog_fakt,0,3),6,3,6,3);
  xlSetCellStringValue(DoubleToStr(itog_fakt,'\3p\m4')+if (Pos('ноль',DoubleToStr(itog_fakt,'\3p5'))<> 0,'',DoubleToStr(itog_fakt,'целых \3p5')),7,3,7,3);
  xlSetCellStringValue(Количество_членов_комиссии,8,3,8,3);
  xlSetCellStringValue(chr(39)+MyGetInitial(Председатель_комиссии_ФИО,true),9,3,9,3);
  
  spodr:='';
  tv1.persnrec:=Председатель_комиссии_nRec;
  if tv1.getfirst persons=tsOk and tv1.getfirst katpodr=tsOk
  { spodr:=' ('+tv1.katpodr.name+') '; }
  xlSetCellStringValue(chr(39)+Председатель_комиссии_Должность,19,3,19,3);
  Номер_члена_комиссии:=0;
  while (Номер_члена_комиссии < Количество_членов_комиссии) do
  { Номер_члена_комиссии:=Номер_члена_комиссии+1;
    xlSetCellStringValue(chr(39)+MyGetInitial(Массив_Член_комиссии_ФИО[Номер_члена_комиссии],true),9+Номер_члена_комиссии , 3 ,9+Номер_члена_комиссии ,3 );
    spodr:='';
    tv1.persnrec:=Массив_Член_комиссии_nrec[Номер_члена_комиссии];
    if tv1.getfirst persons=tsOk and tv1.getfirst katpodr=tsOk
    { spodr:=' ('+tv1.katpodr.name+')'; }
    xlSetCellStringValue(chr(39)+Массив_Член_комиссии_Должность[Номер_члена_комиссии],19+Номер_члена_комиссии , 3 ,19+Номер_члена_комиссии ,3 );
  }
  xlSetCellStringValue(chr(39)+MyGetInitial(МОЛ_Откуда,true),29,3,29,3);
  xlSetCellStringValue(chr(39)+nom,30,3,30,3);
  xlSetCellStringValue(chr(39)+String(ДатаДень)+' '+ДатаМесяц,31,3,31,3);
  xlSetCellStringValue(chr(39)+ДатаГод,32,3,32,3);
  xlSetCellStringValue(chr(39)+ДатаМесяц,33,3,33,3);
  xlSetCellStringValue(chr(39)+DateToStr(ДАТА,'DD/MM/YYYY'),34,3,34,3);
  xlSetCellStringValue(chr(39)+ОКПО,35,3,35,3);
  xlSetCellStringValue(chr(39)+'',36,3,36,3);


 }
//==============
  do {
    if not xldelrangename(1)
    { break 
    }
 } while true 
MyxlAddRangeNameVar('GalDBVar_Katorg.Name',2)
MyxlAddRangeNameVar('GalDBVar_KatPodr.Name',3)
MyxlAddRangeNameVar('GalDBVar_Summ_Str',4)
MyxlAddRangeNameVar('GalDBVar_Itogo',5)

 
// формируем диапазоны для таблицы 
 if not xlSetActiveSheetByName('Gal_TblSheet')
 { message('Не найден лист "Gal_TblSheet"') ; 
  flOk:=false;
 }
 
  do {
    if not xldelrangename(1)
    { break 
    }
 } while true   
 str:=str-1 ;
  xlAddRangeName('GalDBTbl_SpSopr', 1, 1, str, 11);
//для полей  xlAddRangeName('GalDBTblFld_'+'', 1, npp, str, npp);
xlAddRangeName('GalDBTblFld_'+'NREC',1,1,str,1)	
xlAddRangeName('GalDBTblFld_'+'cnt',1,2,str,2)
xlAddRangeName('GalDBTblFld_'+'KatMc.Name',1,3,str,3)	
xlAddRangeName('GalDBTblFld_'+'KatMc.BarKod',1,4,str,4)
xlAddRangeName('GalDBTblFld_'+'KatEd.Name',1,5,str,5)
xlAddRangeName('GalDBTblFld_'+'SpSopr.rPrice',1,6,str,6)
xlAddRangeName('GalDBTblFld_'+'SpSopr.KolFact',1,7,str,7)
xlAddRangeName('GalDBTblFld_'+'SpSopr.Summ',1,8,str,8)
xlAddRangeName('GalDBTblFld_'+'AttrValSp.VSTRING',1,9,str,9)
xlAddRangeName('GalDBTblFld_'+'vid_rab',1,10,str,10)
xlAddRangeName('GalDBTblFld_'+'name_os',1,11,str,11)


  if (not xlAddInsInstal(TranslatePath('%ClientStartPath%') +'XLS\F_XlsRep\', 'GalRepBuilder') )
  {
    Message('Не найдена сервисная надстройка Excel '+'"GalRepBuilder"', Error);
  }
  else
  { xlRunMacro('LoadReport') ;
  }  
 if not xlSetActiveSheetByName('Отчет')
 { message('Не найден лист "Отчет"') ; 
  flOk:=false;
 }
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: ExcelLib вставка

Сообщение m0p3e »

Режима такого нет. Но можно попробовать перед вставкой матрицы вызвать xlInsertRange по размеру матрицы.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: ExcelLib вставка

Сообщение edward_K »

Да и вроде есть объектный фейс для формирования xls отчетов.
Строки можно вставить макросом, но проблема в том что матрица у вас должна быть фиксированной длины - иначе затрете.
Еще вариант держать подножиье на отдельном листе и после вывода таблиц макросом же перенести в конец данных
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Re: ExcelLib вставка

Сообщение galover »

m0p3e
edward_K

спасибо
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: ExcelLib вставка

Сообщение Den »

edward_K писал(а):Еще вариант держать подножиье на отдельном листе и после вывода таблиц макросом же перенести в конец данных
Так и не делал не так давно. Была задача вывести спецификацию и повыводить сверху/снизу заголовки и подножие, с подсчеттом в подножии всякой дребедени (когда разрыв страницы наступает чтоб они выводились...) . Сделал отдельные листы (сразу в шаблоне xls который предварительно делаешьCreateExcelWithTemplate ) с шаблоном шапки и подножия и макрос который при запуске xls уже все это дело подвыводил как нужно.
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: ExcelLib вставка

Сообщение m0p3e »

Вот любители макросов... :)
Есть функции xlCopyToBuff и xlPasteAllFromBuff.
Ответить