12#include <com/sun/star/beans/XPropertySet.hpp>
13#include <com/sun/star/sheet/XSpreadsheetDocument.hpp>
14#include <com/sun/star/sheet/XSpreadsheet.hpp>
15#include <com/sun/star/sheet/XSpreadsheets2.hpp>
16#include <com/sun/star/sheet/XNamedRanges.hpp>
17#include <com/sun/star/sheet/XNamedRange.hpp>
18#include <com/sun/star/table/XCell.hpp>
19#include <com/sun/star/text/XTextRange.hpp>
20#include <com/sun/star/container/XIndexAccess.hpp>
22#include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
23#include <com/sun/star/container/XNameContainer.hpp>
24#include <com/sun/star/table/CellVertJustify.hpp>
25#include <com/sun/star/util/XCloseable.hpp>
27#include <rtl/ustring.hxx>
28#include <cppunit/TestAssert.h>
31using namespace css::uno;
50 uno::Reference<util::XCloseable> xCloseable(
xDestDoc, UNO_QUERY_THROW);
51 xCloseable->close(
true);
63 uno::Reference< container::XNameAccess > xDestSheetNameAccess(
xDestDoc->getSheets(), UNO_QUERY_THROW);
64 CPPUNIT_ASSERT_MESSAGE(
"Wrong sheet name", xDestSheetNameAccess->hasByName(
gaSrcSheetName));
75 uno::Reference< table::XCell > xSrcCell =
xSrcSheet->getCellByPosition(0,0);
76 uno::Reference< text::XTextRange > xSrcTextRange(xSrcCell, UNO_QUERY_THROW);
77 OUString aSrcString = xSrcTextRange->getString();
79 uno::Reference< table::XCell > xDestCell =
xDestSheet->getCellByPosition(0,0);
80 uno::Reference< text::XTextRange > xDestTextRange(xDestCell, UNO_QUERY_THROW);
81 OUString aDestString = xDestTextRange->getString();
83 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Wrong string imported", aSrcString, aDestString);
93 uno::Reference< table::XCell > xSrcCell =
xSrcSheet->getCellByPosition(1,0);
94 sal_Int32 aSrcValue = xSrcCell->getValue();
96 uno::Reference< table::XCell > xDestCell =
xDestSheet->getCellByPosition(1,0);
97 sal_Int32 aDestValue = xDestCell->getValue();
99 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Wrong value imported", aSrcValue, aDestValue);
109 uno::Reference< table::XCell > xSrcCell =
xSrcSheet->getCellByPosition(2,0);
110 OUString aSrcFormula = xSrcCell->getFormula();
112 uno::Reference< table::XCell > xDestCell =
xDestSheet->getCellByPosition(2,0);
113 OUString aDestFormula = xDestCell->getFormula();
117 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Wrong formula imported", aSrcFormula, aDestFormula);
127 uno::Reference< table::XCell > xSrcCell =
xSrcSheet->getCellByPosition(3,0);
128 OUString aSrcFormula = xSrcCell->getFormula();
130 uno::Reference< table::XCell > xDestCell =
xDestSheet->getCellByPosition(3,0);
131 OUString aDestFormula = xDestCell->getFormula();
133 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Wrong Namedrange formula imported", aSrcFormula, aDestFormula);
147 uno::Reference< container::XNameAccess > xDestNamedRangesNameAccess(
getNamedRanges(
xDestDoc), UNO_QUERY_THROW);
148 uno::Any aNr = xDestNamedRangesNameAccess->getByName(
"initial1");
149 uno::Reference< sheet::XNamedRange > xDestNamedRange(aNr, UNO_QUERY_THROW);
150 OUString aNrDestContent = xDestNamedRange->getContent();
152 std::cout <<
"testImportSheet : initial1 aNrDestContent " << aNrDestContent << std::endl;
153 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Wrong address for initial1", OUString(
"$Sheet1.$B$1"), aNrDestContent);
167 OUString aNewInSheetNamedRangeString(
"InSheetRangeName");
168 uno::Reference< container::XNameAccess > xDestNamedRangesNameAccess(
getNamedRanges(
xDestDoc), UNO_QUERY_THROW);
169 CPPUNIT_ASSERT_MESSAGE(
"InSheetRangeName", xDestNamedRangesNameAccess->hasByName(aNewInSheetNamedRangeString));
171 uno::Any aNewInSheetNr = xDestNamedRangesNameAccess->getByName(aNewInSheetNamedRangeString);
172 uno::Reference< sheet::XNamedRange > xDestNewInSheetNamedRange(aNewInSheetNr, UNO_QUERY_THROW);
173 OUString aNewInSheetNrDestContent = xDestNewInSheetNamedRange->getContent();
174 OUString aNewInSheetExpectedContent(
"$SheetToCopy.$A$7");
176 std::cout <<
"testImportSheet : InSheetRangeName content " << aNewInSheetNrDestContent << std::endl;
177 std::cout <<
"testImportSheet : InSheetRangeName expected " << aNewInSheetExpectedContent << std::endl;
178 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Wrong address for InSheetRangeName", aNewInSheetExpectedContent, aNewInSheetNrDestContent);
191 OUString aRedefinedInSheetNamedRangeString(
"initial2");
192 uno::Reference< container::XNameAccess > xDestNamedRangesNameAccess(
getNamedRanges(
xDestDoc), UNO_QUERY_THROW);
193 CPPUNIT_ASSERT_MESSAGE(
"aRedefinedInSheetNamedRangeString", xDestNamedRangesNameAccess->hasByName(aRedefinedInSheetNamedRangeString));
195 uno::Any aRedefinedInSheetNr = xDestNamedRangesNameAccess->getByName(aRedefinedInSheetNamedRangeString);
196 uno::Reference< sheet::XNamedRange > xDestRedefinedInSheetNamedRange(aRedefinedInSheetNr, UNO_QUERY_THROW);
197 OUString aRedefinedInSheetNrDestContent = xDestRedefinedInSheetNamedRange->getContent();
198 std::cout <<
"testImportSheet : initial2 content " << aRedefinedInSheetNrDestContent << std::endl;
199 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Wrong address for Redefined InSheet named range", OUString(
"$Sheet1.$B$2"), aRedefinedInSheetNrDestContent);
212 OUString aNewNamedRangeString(
"new_rangename");
213 uno::Reference< container::XNameAccess > xDestNamedRangesNameAccess(
getNamedRanges(
xDestDoc), UNO_QUERY_THROW);
214 CPPUNIT_ASSERT_MESSAGE(
"New NamedRange not created", xDestNamedRangesNameAccess->hasByName(aNewNamedRangeString));
218 uno::Any aNewNr = xDestNamedRangesNameAccess->getByName(aNewNamedRangeString);
219 uno::Reference< sheet::XNamedRange > xDestNewNamedRange(aNewNr, UNO_QUERY_THROW);
220 OUString aNewNrDestContent = xDestNewNamedRange->getContent();
222 OUString aNewExpectedContent(
"$Sheet1.$B$1");
224 std::cout <<
"testImportSheet : new_rangename aNewExpectedContent " << aNewExpectedContent << std::endl;
225 std::cout <<
"testImportSheet : new_rangename aNewNrDestContent " << aNewNrDestContent << std::endl;
226 CPPUNIT_ASSERT_MESSAGE(
"Wrong New NamedRange formula string value",
isExternalReference(aNewNrDestContent, aNewExpectedContent));
240 uno::Reference< table::XCell > xSrcCell =
xSrcSheet->getCellByPosition(3,0);
244 uno::Reference< beans::XPropertySet > xSrcCellPropSet (xSrcCell, UNO_QUERY_THROW);
245 static const OUStringLiteral aCellProperty(
u"CellStyle");
246 OUString aSrcStyleName;
247 CPPUNIT_ASSERT(xSrcCellPropSet->getPropertyValue(aCellProperty) >>= aSrcStyleName);
249 uno::Reference< beans::XPropertySet > xDestCellPropSet (xSrcCell, UNO_QUERY_THROW);
250 OUString aDestStyleName;
251 CPPUNIT_ASSERT(xDestCellPropSet->getPropertyValue(aCellProperty) >>= aDestStyleName);
253 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Wrong imported Cell Style", aSrcStyleName, aDestStyleName);
255 uno::Reference< style::XStyleFamiliesSupplier > xFamiliesSupplier (
xDestDoc, UNO_QUERY_THROW);
256 uno::Reference< container::XNameAccess > xFamiliesNameAccess (xFamiliesSupplier->getStyleFamilies(), UNO_SET_THROW);
257 uno::Any aCellStylesFamily = xFamiliesNameAccess->getByName(
"CellStyles");
258 uno::Reference< container::XNameContainer > xCellStylesFamilyNameAccess (aCellStylesFamily, UNO_QUERY_THROW);
260 CPPUNIT_ASSERT_MESSAGE(
"New cell style not present", xCellStylesFamilyNameAccess->hasByName(aDestStyleName));
262 uno::Any aCellStyle = xCellStylesFamilyNameAccess->getByName(aDestStyleName);
263 uno::Reference< beans::XPropertySet > xCellStyleProp (aCellStyle, UNO_QUERY_THROW);
264 sal_Int32 aVertJustify = 0;
265 CPPUNIT_ASSERT(xCellStyleProp->getPropertyValue(
"VertJustify") >>= aVertJustify);
267 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"New style: VertJustify not set", table::CellVertJustify_CENTER,
static_cast<table::CellVertJustify
>(aVertJustify));
278 constexpr sal_Int32 nCols = 7;
280 uno::Reference< container::XNameAccess> xSrcNameAccess(
init(),UNO_QUERY_THROW);
283 OUString aSrcString[nCols];
284 for (sal_Int32 nCol=0; nCol < nCols; ++nCol)
286 uno::Reference< table::XCell > xSrcCell =
xSrcSheet->getCellByPosition(nCol, 0);
287 uno::Reference< text::XTextRange > xSrcTextRange(xSrcCell, UNO_QUERY_THROW);
288 aSrcString[nCol] = xSrcTextRange->getString();
293 aSrcString[6] =
"content2";
297 uno::Reference< container::XIndexAccess > xDestSheetIndexAccess (
xDestDoc->getSheets(), UNO_QUERY_THROW);
298 CPPUNIT_ASSERT( nInsertedSheets < xDestSheetIndexAccess->getCount());
301 xDestSheet.set( xDestSheetIndexAccess->getByIndex(nSheet), UNO_QUERY_THROW);
302 for (sal_Int32 nCol=0; nCol < nCols; ++nCol)
304 uno::Reference< table::XCell > xDestCell =
xDestSheet->getCellByPosition(nCol, 0);
305 uno::Reference< text::XTextRange > xDestTextRange(xDestCell, UNO_QUERY_THROW);
306 OUString aDestString = xDestTextRange->getString();
308 if (nCol == 4 && aDestString ==
"Err:540")
313 OString aMessage(
"Imported result does not match, sheet " + OString::number(nSheet)
314 +
" column " + OString::number(nCol));
315 CPPUNIT_ASSERT_EQUAL_MESSAGE( aMessage.getStr(), aSrcString[nCol], aDestString);
323 uno::Reference< sheet::XSpreadsheetDocument > xDoc(xComp, UNO_QUERY_THROW);
329 uno::Reference< beans::XPropertySet > xPropSet (xDoc, UNO_QUERY_THROW);
330 uno::Reference< sheet::XNamedRanges > xNamedRanges(xPropSet->getPropertyValue(
"NamedRanges"), UNO_QUERY_THROW);
336 uno::Reference< container::XNameAccess> xSrcNameAccess(
init(),UNO_QUERY_THROW);
343 uno::Reference< sheet::XSpreadsheets2 > xDestSheets (
xDestDoc->getSheets(), UNO_QUERY_THROW);
344 sal_Int32 nDestPos = 0;
346 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Wrong sheet index", nDestPos, nDestPosEffective);
349 uno::Reference< container::XIndexAccess > xDestSheetIndexAccess (
xDestDoc->getSheets(), UNO_QUERY_THROW);
350 xDestSheet.set( xDestSheetIndexAccess->getByIndex(nDestPosEffective), UNO_QUERY_THROW);
355 CPPUNIT_ASSERT(aDestContent.startsWith(
"'file://"));
357 return (aDestContent.endsWithIgnoreAsciiCase(aSrcContent)
css::uno::Reference< css::sheet::XSpreadsheet > xSrcSheet
css::uno::Reference< css::sheet::XSpreadsheet > xDestSheet
void testLastAfterInsertCopy()
void testImportNamedRangeDefinedInSource()
static css::uno::Reference< css::sheet::XNamedRanges > getNamedRanges(css::uno::Reference< css::sheet::XSpreadsheetDocument > const &)
void testImportFormulaBasicMath()
virtual css::uno::Reference< css::lang::XComponent > loadFromDesktop(const OUString &)=0
virtual css::uno::Reference< css::uno::XInterface > init()=0
virtual ~XSpreadsheets2()
void testImportCellStyle()
void testImportedSheetNameAndIndex()
void testImportNamedRangeRedefinedInSource()
static bool isExternalReference(const OUString &aDestContent, std::u16string_view aSrcContent)
css::uno::Reference< css::sheet::XSpreadsheetDocument > getDoc(const OUString &)
void testImportOverExistingNamedRange()
void testImportFormulaWithNamedRange()
css::uno::Reference< css::sheet::XSpreadsheetDocument > xDocument
css::uno::Reference< css::sheet::XSpreadsheetDocument > xDestDoc
void testImportNewNamedRange()
static sal_Int32 nInsertedSheets(0)
constexpr OUStringLiteral gaSrcFileName(u"rangenamessrc.ods")
constexpr OUStringLiteral gaSrcSheetName(u"SheetToCopy")
constexpr OUStringLiteral gaDestFileBase(u"ScNamedRangeObj.ods")