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 auto aSeqRange = asNonConstRange(
aSeq);
104 for (
size_t i = 0, nRanges = aCellRanges.
size();
i < nRanges; ++
i )
106 ScRange & rRange = aCellRanges[
i ];
107 table::CellRangeAddress aRangeAddress;
109 aSeqRange[
i++ ] = aRangeAddress;
111 xPrintAreas->setPrintAreas(
aSeq );
138 return mxPageProps->getPropertyValue(
"ScaleToPagesY");
145 sal_uInt16 scaleToPageY = 0;
147 if( fitToPagesTall.getValueTypeClass() != uno::TypeClass_BOOLEAN || (fitToPagesTall >>= aValue))
149 fitToPagesTall >>= scaleToPageY;
152 mxPageProps->setPropertyValue(
"ScaleToPagesY",
uno::Any( scaleToPageY ));
154 catch( uno::Exception& )
161 return mxPageProps->getPropertyValue(
"ScaleToPagesX");
168 sal_uInt16 scaleToPageX = 0;
170 if( fitToPagesWide.getValueTypeClass() != uno::TypeClass_BOOLEAN || (fitToPagesWide >>= aValue))
172 fitToPagesWide >>= scaleToPageX;
175 mxPageProps->setPropertyValue(
"ScaleToPagesX",
uno::Any( scaleToPageX ));
177 catch( uno::Exception& )
184 return mxPageProps->getPropertyValue(
"PageScale");
189 sal_uInt16 pageScale = 0;
192 if( zoom.getValueTypeClass() == uno::TypeClass_BOOLEAN )
211 sal_uInt16 nScale = 0;
212 mxPageProps->setPropertyValue(
"ScaleToPages",
uno::Any( nScale ));
213 mxPageProps->setPropertyValue(
"ScaleToPagesX",
uno::Any( nScale ));
214 mxPageProps->setPropertyValue(
"ScaleToPagesY",
uno::Any( nScale ));
216 catch (
const beans::UnknownPropertyException&)
223 catch (
const uno::Exception&)
227 mxPageProps->setPropertyValue(
"PageScale",
uno::Any( pageScale ));
235 uno::Reference<sheet::XHeaderFooterContent> xHeaderContent( mxPageProps->getPropertyValue(
"RightPageHeaderContent"), uno::UNO_QUERY_THROW);
236 uno::Reference< text::XText > xText = xHeaderContent->getLeftText();
237 leftHeader = xText->getString();
239 catch( uno::Exception& )
250 uno::Reference<sheet::XHeaderFooterContent> xHeaderContent( mxPageProps->getPropertyValue(
"RightPageHeaderContent"), uno::UNO_QUERY_THROW);
251 uno::Reference< text::XText > xText = xHeaderContent->getLeftText();
252 xText->setString( leftHeader );
253 mxPageProps->setPropertyValue(
"RightPageHeaderContent",
uno::Any(xHeaderContent) );
255 catch( uno::Exception& )
262 OUString centerHeader;
265 uno::Reference<sheet::XHeaderFooterContent> xHeaderContent( mxPageProps->getPropertyValue(
"RightPageHeaderContent"), uno::UNO_QUERY_THROW);
266 uno::Reference< text::XText > xText = xHeaderContent->getCenterText();
267 centerHeader = xText->getString();
269 catch( uno::Exception& )
280 uno::Reference<sheet::XHeaderFooterContent> xHeaderContent( mxPageProps->getPropertyValue(
"RightPageHeaderContent"), uno::UNO_QUERY_THROW);
281 uno::Reference< text::XText > xText = xHeaderContent->getCenterText();
282 xText->setString( centerHeader );
283 mxPageProps->setPropertyValue(
"RightPageHeaderContent",
uno::Any(xHeaderContent) );
285 catch( uno::Exception& )
292 OUString rightHeader;
295 uno::Reference<sheet::XHeaderFooterContent> xHeaderContent( mxPageProps->getPropertyValue(
"RightPageHeaderContent"), uno::UNO_QUERY_THROW);
296 uno::Reference< text::XText > xText = xHeaderContent->getRightText();
297 rightHeader = xText->getString();
299 catch( uno::Exception& )
310 uno::Reference<sheet::XHeaderFooterContent> xHeaderContent( mxPageProps->getPropertyValue(
"RightPageHeaderContent"), uno::UNO_QUERY_THROW);
311 uno::Reference< text::XText > xText = xHeaderContent->getRightText();
312 xText->setString( rightHeader );
313 mxPageProps->setPropertyValue(
"RightPageHeaderContent",
uno::Any(xHeaderContent) );
315 catch( uno::Exception& )
325 uno::Reference<sheet::XHeaderFooterContent> xFooterContent( mxPageProps->getPropertyValue(
"RightPageFooterContent"), uno::UNO_QUERY_THROW);
326 uno::Reference< text::XText > xText = xFooterContent->getLeftText();
327 leftFooter = xText->getString();
329 catch( uno::Exception& )
340 uno::Reference<sheet::XHeaderFooterContent> xFooterContent( mxPageProps->getPropertyValue(
"RightPageFooterContent"), uno::UNO_QUERY_THROW);
341 uno::Reference< text::XText > xText = xFooterContent->getLeftText();
342 xText->setString( leftFooter );
343 mxPageProps->setPropertyValue(
"RightPageFooterContent",
uno::Any(xFooterContent) );
345 catch( uno::Exception& )
352 OUString centerFooter;
355 uno::Reference<sheet::XHeaderFooterContent> xFooterContent( mxPageProps->getPropertyValue(
"RightPageFooterContent"), uno::UNO_QUERY_THROW);
356 uno::Reference< text::XText > xText = xFooterContent->getCenterText();
357 centerFooter = xText->getString();
359 catch( uno::Exception& )
370 uno::Reference<sheet::XHeaderFooterContent> xFooterContent( mxPageProps->getPropertyValue(
"RightPageFooterContent"), uno::UNO_QUERY_THROW);
371 uno::Reference< text::XText > xText = xFooterContent->getCenterText();
372 xText->setString( centerFooter );
373 mxPageProps->setPropertyValue(
"RightPageFooterContent",
uno::Any(xFooterContent) );
375 catch( uno::Exception& )
383 OUString rightFooter;
386 uno::Reference<sheet::XHeaderFooterContent> xFooterContent( mxPageProps->getPropertyValue(
"RightPageFooterContent"), uno::UNO_QUERY_THROW);
387 uno::Reference< text::XText > xText = xFooterContent->getRightText();
388 rightFooter = xText->getString();
390 catch( uno::Exception& )
401 uno::Reference<sheet::XHeaderFooterContent> xFooterContent( mxPageProps->getPropertyValue(
"RightPageFooterContent"), uno::UNO_QUERY_THROW);
402 uno::Reference< text::XText > xText = xFooterContent->getRightText();
403 xText->setString( rightFooter );
404 mxPageProps->setPropertyValue(
"RightPageFooterContent",
uno::Any(xFooterContent) );
406 catch( uno::Exception& )
413 sal_Int32 order = excel::XlOrder::xlDownThenOver;
416 uno::Any aValue = mxPageProps->getPropertyValue(
"PrintDownFirst");
417 bool bPrintDownFirst =
false;
418 aValue >>= bPrintDownFirst;
419 if( !bPrintDownFirst )
420 order = excel::XlOrder::xlOverThenDown;
422 catch( uno::Exception& )
434 case excel::XlOrder::xlDownThenOver:
436 case excel::XlOrder::xlOverThenDown:
445 mxPageProps->setPropertyValue(
"PrintDownFirst",
uno::Any( bOrder ));
447 catch (
const uno::Exception&)
454 sal_Int16 number = 0;
457 uno::Any aValue = mxPageProps->getPropertyValue(
"FirstPageNumber");
460 catch( uno::Exception& )
466 number = excel::Constants::xlAutomatic;
474 if( firstPageNumber == excel::Constants::xlAutomatic )
480 aValue <<= static_cast<sal_Int16>(firstPageNumber);
481 mxPageProps->setPropertyValue(
"FirstPageNumber", aValue );
483 catch (
const uno::Exception&)
490 bool centerVertically =
false;
493 uno::Any aValue = mxPageProps->getPropertyValue(
"CenterVertically");
494 aValue >>= centerVertically;
496 catch (
const uno::Exception&)
499 return centerVertically;
506 mxPageProps->setPropertyValue(
"CenterVertically",
uno::Any( centerVertically ));
508 catch (
const uno::Exception&)
515 bool centerHorizontally =
false;
518 uno::Any aValue = mxPageProps->getPropertyValue(
"CenterHorizontally");
519 aValue >>= centerHorizontally;
521 catch (
const uno::Exception&)
524 return centerHorizontally;
531 mxPageProps->setPropertyValue(
"CenterHorizontally",
uno::Any( centerHorizontally ));
533 catch (
const uno::Exception&)
540 bool printHeadings =
false;
543 uno::Any aValue = mxPageProps->getPropertyValue(
"PrintHeaders");
544 aValue >>= printHeadings;
546 catch (
const uno::Exception&)
549 return printHeadings;
556 mxPageProps->setPropertyValue(
"PrintHeaders",
uno::Any( printHeadings ));
558 catch( uno::Exception& )
591 mxPageProps->getPropertyValue(
"Size" ) >>= aSize;
593 ::std::swap( aSize.Width, aSize.Height );
596 if ( nPaperSizeIndex == 0 )
597 nPaperSizeIndex = excel::XlPaperSize::xlPaperUser;
598 return nPaperSizeIndex;
603 if ( papersize != excel::XlPaperSize::xlPaperUser )
605 awt::Size aPaperSize;
607 aPaperSize.Height = rConvertedSize.
mnHeight;
608 aPaperSize.Width = rConvertedSize.
mnWidth;
610 ::std::swap( aPaperSize.Width, aPaperSize.Height );
611 mxPageProps->setPropertyValue(
"Size",
uno::Any( aPaperSize ) );
618 return "ScVbaPageSetup";
621 uno::Sequence< OUString >
626 "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
bool m_bDetectedRangeSegmentation false
virtual OUString SAL_CALL getPrintArea() override
double SAL_CALL getFooterMargin() override