25 #include <com/sun/star/sheet/XPrintAreas.hpp>
26 #include <com/sun/star/sheet/XHeaderFooterContent.hpp>
27 #include <com/sun/star/text/XText.hpp>
28 #include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
29 #include <com/sun/star/container/XNameAccess.hpp>
30 #include <ooo/vba/excel/XlPageOrientation.hpp>
31 #include <ooo/vba/excel/XlOrder.hpp>
32 #include <ooo/vba/excel/Constants.hpp>
33 #include <ooo/vba/excel/XlPaperSize.hpp>
44 const uno::Reference< uno::XComponentContext >& xContext,
45 const uno::Reference< sheet::XSpreadsheet >& xSheet,
46 const uno::Reference< frame::XModel >& xModel):
50 mxModel.set( xModel, uno::UNO_SET_THROW );
51 uno::Reference< beans::XPropertySet > xSheetProps(
mxSheet, uno::UNO_QUERY_THROW );
52 uno::Any aValue = xSheetProps->getPropertyValue(
"PageStyle");
54 aValue >>= aStyleName;
56 uno::Reference< style::XStyleFamiliesSupplier > xStyleFamiliesSup(
mxModel, uno::UNO_QUERY_THROW );
57 uno::Reference< container::XNameAccess > xStyleFamilies = xStyleFamiliesSup->getStyleFamilies();
58 uno::Reference< container::XNameAccess > xPageStyle( xStyleFamilies->getByName(
"PageStyles"), uno::UNO_QUERY_THROW );
59 mxPageProps.set( xPageStyle->getByName(aStyleName), uno::UNO_QUERY_THROW );
60 mnOrientLandscape = excel::XlPageOrientation::xlLandscape;
61 mnOrientPortrait = excel::XlPageOrientation::xlPortrait;
62 mxPageProps->getPropertyValue(
"IsLandscape") >>=
mbIsLandscape;
68 uno::Reference< sheet::XPrintAreas > xPrintAreas(
mxSheet, uno::UNO_QUERY_THROW );
69 const uno::Sequence< table::CellRangeAddress >
aSeq = xPrintAreas->getPrintAreas();
70 if( aSeq.hasElements() )
73 for(
const auto& rRange : aSeq )
88 uno::Reference< sheet::XPrintAreas > xPrintAreas(
mxSheet, uno::UNO_QUERY_THROW );
89 if( rAreas.isEmpty() ||
90 rAreas.equalsIgnoreAsciiCase(
"FALSE" ) )
93 uno::Sequence< table::CellRangeAddress >
aSeq;
94 xPrintAreas->setPrintAreas( aSeq );
102 uno::Sequence< table::CellRangeAddress >
aSeq( aCellRanges.
size() );
103 for (
size_t i = 0, nRanges = aCellRanges.
size();
i < nRanges; ++
i )
105 ScRange & rRange = aCellRanges[
i ];
106 table::CellRangeAddress aRangeAddress;
108 aSeq[
i++ ] = aRangeAddress;
110 xPrintAreas->setPrintAreas(
aSeq );
137 return mxPageProps->getPropertyValue(
"ScaleToPagesY");
144 sal_uInt16 scaleToPageY = 0;
146 if( fitToPagesTall.getValueTypeClass() != uno::TypeClass_BOOLEAN || (fitToPagesTall >>= aValue))
148 fitToPagesTall >>= scaleToPageY;
151 mxPageProps->setPropertyValue(
"ScaleToPagesY", uno::makeAny( scaleToPageY ));
153 catch( uno::Exception& )
160 return mxPageProps->getPropertyValue(
"ScaleToPagesX");
167 sal_uInt16 scaleToPageX = 0;
169 if( fitToPagesWide.getValueTypeClass() != uno::TypeClass_BOOLEAN || (fitToPagesWide >>= aValue))
171 fitToPagesWide >>= scaleToPageX;
174 mxPageProps->setPropertyValue(
"ScaleToPagesX", uno::makeAny( scaleToPageX ));
176 catch( uno::Exception& )
183 return mxPageProps->getPropertyValue(
"PageScale");
188 sal_uInt16 pageScale = 0;
191 if( zoom.getValueTypeClass() == uno::TypeClass_BOOLEAN )
210 sal_uInt16 nScale = 0;
211 mxPageProps->setPropertyValue(
"ScaleToPages", uno::makeAny( nScale ));
212 mxPageProps->setPropertyValue(
"ScaleToPagesX", uno::makeAny( nScale ));
213 mxPageProps->setPropertyValue(
"ScaleToPagesY", uno::makeAny( nScale ));
215 catch (
const beans::UnknownPropertyException&)
222 catch (
const uno::Exception&)
226 mxPageProps->setPropertyValue(
"PageScale", uno::makeAny( pageScale ));
234 uno::Reference<sheet::XHeaderFooterContent> xHeaderContent( mxPageProps->getPropertyValue(
"RightPageHeaderContent"), uno::UNO_QUERY_THROW);
235 uno::Reference< text::XText > xText = xHeaderContent->getLeftText();
236 leftHeader = xText->getString();
238 catch( uno::Exception& )
249 uno::Reference<sheet::XHeaderFooterContent> xHeaderContent( mxPageProps->getPropertyValue(
"RightPageHeaderContent"), uno::UNO_QUERY_THROW);
250 uno::Reference< text::XText > xText = xHeaderContent->getLeftText();
251 xText->setString( leftHeader );
252 mxPageProps->setPropertyValue(
"RightPageHeaderContent", uno::makeAny(xHeaderContent) );
254 catch( uno::Exception& )
261 OUString centerHeader;
264 uno::Reference<sheet::XHeaderFooterContent> xHeaderContent( mxPageProps->getPropertyValue(
"RightPageHeaderContent"), uno::UNO_QUERY_THROW);
265 uno::Reference< text::XText > xText = xHeaderContent->getCenterText();
266 centerHeader = xText->getString();
268 catch( uno::Exception& )
279 uno::Reference<sheet::XHeaderFooterContent> xHeaderContent( mxPageProps->getPropertyValue(
"RightPageHeaderContent"), uno::UNO_QUERY_THROW);
280 uno::Reference< text::XText > xText = xHeaderContent->getCenterText();
281 xText->setString( centerHeader );
282 mxPageProps->setPropertyValue(
"RightPageHeaderContent", uno::makeAny(xHeaderContent) );
284 catch( uno::Exception& )
291 OUString rightHeader;
294 uno::Reference<sheet::XHeaderFooterContent> xHeaderContent( mxPageProps->getPropertyValue(
"RightPageHeaderContent"), uno::UNO_QUERY_THROW);
295 uno::Reference< text::XText > xText = xHeaderContent->getRightText();
296 rightHeader = xText->getString();
298 catch( uno::Exception& )
309 uno::Reference<sheet::XHeaderFooterContent> xHeaderContent( mxPageProps->getPropertyValue(
"RightPageHeaderContent"), uno::UNO_QUERY_THROW);
310 uno::Reference< text::XText > xText = xHeaderContent->getRightText();
311 xText->setString( rightHeader );
312 mxPageProps->setPropertyValue(
"RightPageHeaderContent", uno::makeAny(xHeaderContent) );
314 catch( uno::Exception& )
324 uno::Reference<sheet::XHeaderFooterContent> xFooterContent( mxPageProps->getPropertyValue(
"RightPageFooterContent"), uno::UNO_QUERY_THROW);
325 uno::Reference< text::XText > xText = xFooterContent->getLeftText();
326 leftFooter = xText->getString();
328 catch( uno::Exception& )
339 uno::Reference<sheet::XHeaderFooterContent> xFooterContent( mxPageProps->getPropertyValue(
"RightPageFooterContent"), uno::UNO_QUERY_THROW);
340 uno::Reference< text::XText > xText = xFooterContent->getLeftText();
341 xText->setString( leftFooter );
342 mxPageProps->setPropertyValue(
"RightPageFooterContent", uno::makeAny(xFooterContent) );
344 catch( uno::Exception& )
351 OUString centerFooter;
354 uno::Reference<sheet::XHeaderFooterContent> xFooterContent( mxPageProps->getPropertyValue(
"RightPageFooterContent"), uno::UNO_QUERY_THROW);
355 uno::Reference< text::XText > xText = xFooterContent->getCenterText();
356 centerFooter = xText->getString();
358 catch( uno::Exception& )
369 uno::Reference<sheet::XHeaderFooterContent> xFooterContent( mxPageProps->getPropertyValue(
"RightPageFooterContent"), uno::UNO_QUERY_THROW);
370 uno::Reference< text::XText > xText = xFooterContent->getCenterText();
371 xText->setString( centerFooter );
372 mxPageProps->setPropertyValue(
"RightPageFooterContent", uno::makeAny(xFooterContent) );
374 catch( uno::Exception& )
382 OUString rightFooter;
385 uno::Reference<sheet::XHeaderFooterContent> xFooterContent( mxPageProps->getPropertyValue(
"RightPageFooterContent"), uno::UNO_QUERY_THROW);
386 uno::Reference< text::XText > xText = xFooterContent->getRightText();
387 rightFooter = xText->getString();
389 catch( uno::Exception& )
400 uno::Reference<sheet::XHeaderFooterContent> xFooterContent( mxPageProps->getPropertyValue(
"RightPageFooterContent"), uno::UNO_QUERY_THROW);
401 uno::Reference< text::XText > xText = xFooterContent->getRightText();
402 xText->setString( rightFooter );
403 mxPageProps->setPropertyValue(
"RightPageFooterContent", uno::makeAny(xFooterContent) );
405 catch( uno::Exception& )
412 sal_Int32 order = excel::XlOrder::xlDownThenOver;
415 uno::Any aValue = mxPageProps->getPropertyValue(
"PrintDownFirst");
416 bool bPrintDownFirst =
false;
417 aValue >>= bPrintDownFirst;
418 if( !bPrintDownFirst )
419 order = excel::XlOrder::xlOverThenDown;
421 catch( uno::Exception& )
433 case excel::XlOrder::xlDownThenOver:
435 case excel::XlOrder::xlOverThenDown:
444 mxPageProps->setPropertyValue(
"PrintDownFirst", uno::makeAny( bOrder ));
446 catch (
const uno::Exception&)
453 sal_Int16 number = 0;
456 uno::Any aValue = mxPageProps->getPropertyValue(
"FirstPageNumber");
459 catch( uno::Exception& )
465 number = excel::Constants::xlAutomatic;
473 if( firstPageNumber == excel::Constants::xlAutomatic )
479 aValue <<= static_cast<sal_Int16>(firstPageNumber);
480 mxPageProps->setPropertyValue(
"FirstPageNumber", aValue );
482 catch (
const uno::Exception&)
489 bool centerVertically =
false;
492 uno::Any aValue = mxPageProps->getPropertyValue(
"CenterVertically");
493 aValue >>= centerVertically;
495 catch (
const uno::Exception&)
498 return centerVertically;
505 mxPageProps->setPropertyValue(
"CenterVertically", uno::makeAny( centerVertically ));
507 catch (
const uno::Exception&)
514 bool centerHorizontally =
false;
517 uno::Any aValue = mxPageProps->getPropertyValue(
"CenterHorizontally");
518 aValue >>= centerHorizontally;
520 catch (
const uno::Exception&)
523 return centerHorizontally;
530 mxPageProps->setPropertyValue(
"CenterHorizontally", uno::makeAny( centerHorizontally ));
532 catch (
const uno::Exception&)
539 bool printHeadings =
false;
542 uno::Any aValue = mxPageProps->getPropertyValue(
"PrintHeaders");
543 aValue >>= printHeadings;
545 catch (
const uno::Exception&)
548 return printHeadings;
555 mxPageProps->setPropertyValue(
"PrintHeaders", uno::makeAny( printHeadings ));
557 catch( uno::Exception& )
590 mxPageProps->getPropertyValue(
"Size" ) >>= aSize;
592 ::std::swap( aSize.Width, aSize.Height );
595 if ( nPaperSizeIndex == 0 )
596 nPaperSizeIndex = excel::XlPaperSize::xlPaperUser;
597 return nPaperSizeIndex;
602 if ( papersize != excel::XlPaperSize::xlPaperUser )
604 awt::Size aPaperSize;
606 aPaperSize.Height = rConvertedSize.
mnHeight;
607 aPaperSize.Width = rConvertedSize.
mnWidth;
609 ::std::swap( aPaperSize.Width, aPaperSize.Height );
610 mxPageProps->setPropertyValue(
"Size", uno::makeAny( aPaperSize ) );
617 return "ScVbaPageSetup";
620 uno::Sequence< OUString >
625 "ooo.vba.excel.PageSetup"
static sal_Int32 getMSPaperSizeIndex(const css::awt::Size &rSize)
virtual void SAL_CALL setCenterHeader(const OUString ¢erHeader) override
virtual sal_Bool SAL_CALL getPrintHeadings() override
virtual double SAL_CALL getFooterMargin()
virtual sal_Bool SAL_CALL getCenterHorizontally() override
virtual void SAL_CALL setOrder(sal_Int32 order) override
bool getScRangeListForAddress(const OUString &sName, ScDocShell *pDocSh, const ScRange &refRange, ScRangeList &aCellRanges, formula::FormulaGrammar::AddressConvention aConv)
virtual sal_Bool SAL_CALL getCenterVertically() override
virtual sal_Int32 SAL_CALL getPaperSize() override
void Format(OUString &, ScRefFlags nFlags, const ScDocument &, formula::FormulaGrammar::AddressConvention eConv=formula::FormulaGrammar::CONV_OOO, sal_Unicode cDelimiter=0, bool bFullAddressNotation=false) const
virtual OUString SAL_CALL getPrintTitleRows() override
virtual sal_Int32 SAL_CALL getOrder() override
virtual void SAL_CALL setRightFooter(const OUString &rightFooter) override
css::uno::Reference< css::frame::XModel2 > mxModel
Sequence< OUString > aServiceNames
virtual sal_Bool SAL_CALL getPrintGridlines() override
virtual OUString SAL_CALL getLeftFooter() override
virtual OUString SAL_CALL getCenterHeader() override
virtual void SAL_CALL setPrintTitleRows(const OUString &_printtitlerows) override
cppu::ImplInheritanceHelper< VbaPageSetupBase, ov::excel::XPageSetup > ScVbaPageSetup_BASE
ScVbaPageSetup(const css::uno::Reference< ov::XHelperInterface > &xParent, const css::uno::Reference< css::uno::XComponentContext > &xContext, const css::uno::Reference< css::sheet::XSpreadsheet > &xSheet, const css::uno::Reference< css::frame::XModel > &xModel)
static const ApiPaperSize & getApiSizeForMSPaperSizeIndex(sal_Int32 nMSOPaperIndex)
virtual void SAL_CALL setPaperSize(sal_Int32 papersize) override
virtual void SAL_CALL setCenterHorizontally(sal_Bool centerHorizontally) override
void push_back(const ScRange &rRange)
virtual void SAL_CALL setHeaderMargin(double margin)
virtual css::uno::Sequence< OUString > getServiceNames() override
virtual OUString SAL_CALL getRightFooter() override
virtual void SAL_CALL setLeftHeader(const OUString &leftHeader) override
virtual void SAL_CALL setPrintArea(const OUString &rAreas) override
virtual css::uno::Any SAL_CALL getFitToPagesWide() override
ScDocShell * getDocShell(const css::uno::Reference< css::frame::XModel > &xModel)
virtual OUString SAL_CALL getLeftHeader() override
virtual void SAL_CALL setFitToPagesTall(const css::uno::Any &fitToPagesTall) override
virtual OUString SAL_CALL getPrintTitleColumns() override
virtual OUString getServiceImplName() override
void SAL_CALL setHeaderMargin(double margin) override
virtual double SAL_CALL getHeaderMargin()
virtual void SAL_CALL setPrintHeadings(sal_Bool printHeadings) override
void SAL_CALL setFooterMargin(double margin) override
virtual double SAL_CALL getHeaderMargin() override
virtual void SAL_CALL setLeftFooter(const OUString &leftFooter) override
#define ERRCODE_BASIC_BAD_PARAMETER
virtual void SAL_CALL setFitToPagesWide(const css::uno::Any &fitToPagesWide) override
virtual sal_Int32 SAL_CALL getFirstPageNumber() override
virtual void SAL_CALL setCenterFooter(const OUString ¢erFooter) override
Sequence< sal_Int8 > aSeq
const ScDocument & GetDocument() const
virtual css::uno::Any SAL_CALL getFitToPagesTall() override
virtual OUString SAL_CALL getRightHeader() override
static void FillApiRange(css::table::CellRangeAddress &rApiRange, const ScRange &rScRange)
virtual void SAL_CALL setCenterVertically(sal_Bool centerVertically) override
virtual void SAL_CALL setFooterMargin(double margin)
virtual void SAL_CALL setRightHeader(const OUString &rightHeader) override
virtual void SAL_CALL setFirstPageNumber(sal_Int32 firstPageNumber) override
static void FillScRange(ScRange &rScRange, const css::table::CellRangeAddress &rApiRange)
css::uno::Reference< css::sheet::XSpreadsheet > mxSheet
virtual void SAL_CALL setZoom(const css::uno::Any &zoom) override
virtual void SAL_CALL setPrintGridlines(sal_Bool _printgridlines) override
virtual void SAL_CALL setPrintTitleColumns(const OUString &_printtitlecolumns) override
virtual OUString SAL_CALL getCenterFooter() override
virtual css::uno::Any SAL_CALL getZoom() override
virtual OUString SAL_CALL getPrintArea() override
double SAL_CALL getFooterMargin() override