ExcelLib вставка
Модераторы: m0p3e, edward_K, Модераторы
ExcelLib вставка
Можно ли с помощью ExcelLib делать вставку матрицы в Excel не заменой, а именно вставкой? Проблема такая: есть заголовок таблицы и в конце таблицы список подписей. Так вот этот список подписей я хочу нарисовать заранее. Задача добиться вставки матрицы не заменяя эти подписи (в Excel есть спец. опция вставки для такого случая). Можно ли добиться желаемого?
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: ExcelLib вставка
ну проще разобраться с формированием стандартных 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;
}
Re: ExcelLib вставка
Режима такого нет. Но можно попробовать перед вставкой матрицы вызвать xlInsertRange по размеру матрицы.
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: ExcelLib вставка
Да и вроде есть объектный фейс для формирования xls отчетов.
Строки можно вставить макросом, но проблема в том что матрица у вас должна быть фиксированной длины - иначе затрете.
Еще вариант держать подножиье на отдельном листе и после вывода таблиц макросом же перенести в конец данных
Строки можно вставить макросом, но проблема в том что матрица у вас должна быть фиксированной длины - иначе затрете.
Еще вариант держать подножиье на отдельном листе и после вывода таблиц макросом же перенести в конец данных
Re: ExcelLib вставка
m0p3e
edward_K
спасибо
edward_K
спасибо
-
- Местный житель
- Сообщения: 1846
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: ExcelLib вставка
Так и не делал не так давно. Была задача вывести спецификацию и повыводить сверху/снизу заголовки и подножие, с подсчеттом в подножии всякой дребедени (когда разрыв страницы наступает чтоб они выводились...) . Сделал отдельные листы (сразу в шаблоне xls который предварительно делаешьCreateExcelWithTemplate ) с шаблоном шапки и подножия и макрос который при запуске xls уже все это дело подвыводил как нужно.edward_K писал(а):Еще вариант держать подножиье на отдельном листе и после вывода таблиц макросом же перенести в конец данных
Re: ExcelLib вставка
Вот любители макросов... 
Есть функции xlCopyToBuff и xlPasteAllFromBuff.

Есть функции xlCopyToBuff и xlPasteAllFromBuff.