26 #include <osl/diagnose.h>
27 #include <rtl/ustring.hxx>
28 #include <rtl/ustrbuf.hxx>
29 #include <rtl/random.h>
36 #include <officecfg/Office/Calc.hxx>
47 #include <compiler.hxx>
49 #include <tokenarray.hxx>
52 #include <globstr.hrc>
61 #include <oox/token/tokens.hxx>
69 #include <com/sun/star/task/XStatusIndicator.hpp>
75 #define DEBUG_XL_ENCRYPTION 0
77 using ::com::sun::star::uno::XInterface;
87 using namespace ::
oox;
92 mbUseEncrypter(
false ),
93 mnMaxRecSize( nMaxRecSize ),
115 OSL_ENSURE( !
mbInRec,
"XclExpStream::StartRecord - another record still open" );
127 OSL_ENSURE(
mbInRec,
"XclExpStream::EndRecord - no record open" );
222 std::size_t nRet = 0;
223 if( pData && (nBytes > 0) )
228 std::size_t nBytesLeft = nBytes;
231 while( bValid && (nBytesLeft > 0) )
233 std::size_t nWriteLen = ::std::min< std::size_t >(
PrepareWrite(), nBytesLeft );
234 std::size_t nWriteRet = nWriteLen;
237 OSL_ENSURE(nWriteLen > 0,
"XclExpStream::Write: write length is 0!");
238 vector<sal_uInt8> aBytes(nWriteLen);
239 memcpy(aBytes.data(), pBuffer, nWriteLen);
246 bValid = (nWriteLen == nWriteRet);
247 OSL_ENSURE( bValid,
"XclExpStream::Write - stream write error" );
249 pBuffer += nWriteRet;
251 nBytesLeft -= nWriteRet;
265 std::size_t nBytesLeft = nBytes;
266 while( nBytesLeft > 0 )
268 std::size_t nWriteLen = ::std::min< std::size_t >(
PrepareWrite(), nBytesLeft );
270 nBytesLeft -= nWriteLen;
284 for (std::size_t
i = 0;
i < nBytes; ++
i)
291 sal_uInt64 nBytesLeft = ::std::min(nBytes, nRemaining);
292 if( nBytesLeft <= 0 )
295 const std::size_t nMaxBuffer = 4096;
296 std::unique_ptr<sal_uInt8[]> pBuffer(
297 new sal_uInt8[ ::std::min<std::size_t>(nBytesLeft, nMaxBuffer) ]);
300 while( bValid && (nBytesLeft > 0) )
302 std::size_t nWriteLen = ::std::min<std::size_t>(nBytesLeft, nMaxBuffer);
303 rInStrm.
ReadBytes(pBuffer.get(), nWriteLen);
304 std::size_t nWriteRet =
Write( pBuffer.get(), nWriteLen );
305 bValid = (nWriteLen == nWriteRet);
306 nBytesLeft -= nWriteRet;
314 sal_uInt16 nCharLen = nFlags ? 2 : 1;
316 for(
const auto& rItem : rBuffer )
326 operator<<( static_cast< sal_uInt8 >( rItem ) );
336 std::size_t nLen = ::std::min< std::size_t >( rString.getLength(), 0x00FF );
337 nLen = ::std::min< std::size_t >( nLen, 0xFF );
343 operator<<( static_cast< sal_uInt8 >( nLen ) );
344 Write( rString.getStr(), nLen );
350 Write( rBuffer.data(), rBuffer.size() );
375 OSL_ENSURE( !
mbInRec,
"XclExpStream::SetSvStreamPos - not allowed inside of a record" );
451 const sal_uInt32 nData = 0;
452 std::size_t nBytesLeft = nBytes;
453 while( nBytesLeft >=
sizeof( nData ) )
456 nBytesLeft -=
sizeof( nData );
467 if( !aEncryptionData.hasElements() )
470 Init( aEncryptionData );
497 vector<sal_uInt8> aByte { nData };
503 ::std::vector<sal_uInt8> pnBytes
505 o3tl::narrowing<sal_uInt8>(nData & 0xFF),
506 o3tl::narrowing<sal_uInt8>((nData >> 8) & 0xFF)
513 ::std::vector<sal_uInt8> pnBytes
515 o3tl::narrowing<sal_uInt8>(nData & 0xFF),
516 o3tl::narrowing<sal_uInt8>((nData >> 8) & 0xFF),
517 o3tl::narrowing<sal_uInt8>((nData >> 16) & 0xFF),
518 o3tl::narrowing<sal_uInt8>((nData >> 24) & 0xFF)
525 ::std::vector<sal_uInt8> pnBytes(4);
526 memcpy(pnBytes.data(), &fValue, 4);
532 ::std::vector<sal_uInt8> pnBytes(8);
533 memcpy(pnBytes.data(), &fValue, 8);
539 Encrypt(rStrm, static_cast<sal_uInt8>(nData));
544 Encrypt(rStrm, static_cast<sal_uInt16>(nData));
549 Encrypt(rStrm, static_cast<sal_uInt32>(nData));
563 rtl_random_getBytes( aRandomPool,
mpnSalt, 16 );
564 rtl_random_destroyPool( aRandomPool );
589 sal_uInt64 nStrmPos = rStrm.
Tell();
593 #if DEBUG_XL_ENCRYPTION
594 fprintf(stdout,
"XclExpBiff8Encrypter::EncryptBytes: stream pos = %ld offset in block = %d block pos = %ld\n",
595 nStrmPos, nBlockOffset, nBlockPos);
598 sal_uInt16 nSize =
static_cast< sal_uInt16
>( aBytes.size() );
602 #if DEBUG_XL_ENCRYPTION
603 fprintf(stdout,
"RAW: ");
604 for (sal_uInt16
i = 0;
i < nSize; ++
i)
605 fprintf(stdout,
"%2.2X ", aBytes[
i]);
606 fprintf(stdout,
"\n");
614 if ( (nBlockPos != nOldBlockPos) || (nBlockOffset < nOldOffset) )
620 if (nBlockOffset > nOldOffset)
624 sal_uInt16 nBytesLeft = nSize;
626 while (nBytesLeft > 0)
629 sal_uInt16 nEncBytes = ::std::min(nBlockLeft, nBytesLeft);
631 bool bRet =
maCodec.
Encode(&aBytes[nPos], nEncBytes, &aBytes[nPos], nEncBytes);
632 OSL_ENSURE(bRet,
"XclExpBiff8Encrypter::EncryptBytes: encryption failed!!");
634 std::size_t nRet = rStrm.
WriteBytes(&aBytes[nPos], nEncBytes);
635 OSL_ENSURE(nRet == nEncBytes,
"XclExpBiff8Encrypter::EncryptBytes: fail to write to stream!!");
637 nStrmPos = rStrm.
Tell();
640 if (nBlockOffset == 0)
643 nBytesLeft -= nEncBytes;
652 switch( nXclErrCode )
661 default:
return "#N/A";
680 rsValue = OUString::number(aResValue.
mfValue);
689 rsType =
"inlineStr";
698 sBuf.appendAscii( sStreamDir );
699 sBuf.appendAscii( sStream );
702 if( strstr(sStream,
"vml") )
703 sBuf.append(
".vml" );
705 sBuf.append(
".xml" );
706 return sBuf.makeStringAndClear();
728 const sal_uInt16* pBuffer = rBuffer.data();
730 reinterpret_cast<sal_Unicode const *>(pBuffer), rBuffer.size(),
731 RTL_TEXTENCODING_UTF8);
738 bFullAddressNotation ) );
739 return sRange.toUtf8();
761 OSL_ENSURE( !s.
IsRich(),
"XclXmlUtils::ToOString(XclExpString): rich text string found!" );
778 for(
const auto& rRange : rRanges )
782 return ToOString( rDoc, aRanges );
787 return OUString( s, static_cast<sal_Int32>(strlen( s )), RTL_TEXTENCODING_ASCII_US );
792 if( nLength == -1 || ( nLength > (static_cast<sal_Int32>(rBuf.size()) - nStart) ) )
793 nLength = (rBuf.size() - nStart);
797 reinterpret_cast<sal_Unicode const *>(&rBuf[nStart]), nLength)
805 ScCompiler aCompiler( rCtx, rAddress, const_cast<ScTokenArray&>(*pTokenArray));
808 aCompiler.
SetGrammar(FormulaGrammar::GRAM_OOXML);
810 sal_Int32 nLen = pTokenArray->
GetLen();
811 OUStringBuffer
aBuffer( nLen ? (nLen * 5) : 8 );
816 if (nErrCode != FormulaError::NONE)
822 assert(!
"No code and no error.");
826 return aBuffer.makeStringAndClear();
831 OSL_ENSURE( !s.
IsRich(),
"XclXmlUtils::ToOString(XclExpString): rich text string found!" );
839 rStream->singleElement(nElement, XML_val, pValue);
844 bHaveUnderline =
true;
852 default: bHaveUnderline =
false;
return "none";
858 bHaveAlignment =
true;
859 switch( eEscapement )
861 case SvxEscapement::Superscript:
return "superscript";
862 case SvxEscapement::Subscript:
return "subscript";
863 case SvxEscapement::Off:
864 default: bHaveAlignment =
false;
return "baseline";
870 bool bHaveUnderline, bHaveVertAlign;
881 lcl_WriteValue( pStream, XML_u, bHaveUnderline ? pUnderline :
nullptr );
882 lcl_WriteValue( pStream, XML_vertAlign, bHaveVertAlign ? pVertAlign :
nullptr );
885 pStream->singleElement( XML_color,
900 : XmlFilterBase( rCC ),
902 mbExportVBA(bExportVBA),
903 mbExportTemplate(bExportTemplate)
909 assert(
maStreams.empty() &&
"Forgotten PopStream()?");
914 OSL_ENSURE( !
maStreams.empty(),
"XclExpXmlStream::GetCurrentStream - no current stream" );
925 OSL_ENSURE( !
maStreams.empty(),
"XclExpXmlStream::PopStream - stack is empty!" );
938 GetCurrentStream()->write(
" ")->writeId(nAttr)->write(
"=\"")->writeEscaped(sVal)->write(
"\"");
942 const OUString& sFullStream,
943 std::u16string_view sRelativeStream,
944 const uno::Reference< XOutputStream >& xParentRelation,
945 const char* sContentType,
946 std::u16string_view sRelationshipType,
947 OUString* pRelationshipId )
949 OUString sRelationshipId;
950 if (xParentRelation.is())
951 sRelationshipId =
addRelation( xParentRelation, OUString(sRelationshipType), sRelativeStream );
953 sRelationshipId =
addRelation( OUString(sRelationshipType), sRelativeStream );
955 if( pRelationshipId )
956 *pRelationshipId = sRelationshipId;
1009 const bool bValidateTabNames = officecfg::Office::Calc::Filter::Export::MS_Excel::TruncateLongSheetNames::get();
1010 std::vector<OUString> aOriginalTabNames;
1011 if (bValidateTabNames)
1018 if (xStatusIndicator.is())
1019 xStatusIndicator->start(
ScResId(STR_SAVE_DOC), 100);
1025 drawingml::DrawingML::ResetMlCounters();
1026 drawingml::DrawingML::PushExportGraphics();
1034 aData.maMaxPos.SetCol( ::std::min(
aData.maScMaxPos.Col(),
aData.maXclMaxPos.Col() ) );
1035 aData.maMaxPos.SetRow( ::std::min(
aData.maScMaxPos.Row(),
aData.maXclMaxPos.Row() ) );
1036 aData.maMaxPos.SetTab( ::std::min(
aData.maScMaxPos.Tab(),
aData.maXclMaxPos.Tab() ) );
1037 aData.mpCompileFormulaCxt = std::make_shared<sc::CompileFormulaContext>(rDoc);
1040 aData.maBasePath = OUString(
"file:///" + aPath.GetPath() +
"\\").replace(
'\\',
'/')
1042 .replaceFirst(
"file:////",
"file:///");
1053 OUString
const workbook =
"xl/workbook.xml";
1054 const char* pWorkbookContentType =
nullptr;
1059 pWorkbookContentType =
"application/vnd.ms-excel.template.macroEnabled.main+xml";
1063 pWorkbookContentType =
"application/vnd.ms-excel.sheet.macroEnabled.main+xml";
1070 pWorkbookContentType =
"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml";
1074 pWorkbookContentType =
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml";
1079 uno::Reference <XOutputStream>(),
1080 pWorkbookContentType,
1092 css::uno::Reference<css::io::XInputStream> xVBAStream(
1094 css::uno::Reference<css::io::XOutputStream> xVBAOutput =
1105 if (xStatusIndicator.is())
1106 xStatusIndicator->setValue(10);
1108 if (xStatusIndicator.is())
1109 xStatusIndicator->setValue(40);
1111 rDoc.GetExternalRefManager()->disableSkipUnusedFileIds();
1120 if (bValidateTabNames)
1125 if (xStatusIndicator.is())
1126 xStatusIndicator->end();
1129 drawingml::DrawingML::PopExportGraphics();
1146 const int MAX_TAB_NAME_LENGTH = 31;
1155 rDoc.
GetName(nTab, aOriginalTabNames[nTab]);
1159 std::vector<OUString> aNewTabNames;
1165 const OUString& rOriginalName = aOriginalTabNames[nTab];
1166 if (rOriginalName.getLength() > MAX_TAB_NAME_LENGTH)
1171 if (aNewName.isEmpty())
1173 aNewName = rOriginalName.copy(0, MAX_TAB_NAME_LENGTH);
1174 if (aNewTabNames.end() != std::find(aNewTabNames.begin(), aNewTabNames.end(), aNewName) ||
1175 aOriginalTabNames.end() != std::find(aOriginalTabNames.begin(), aOriginalTabNames.end(), aNewName))
1183 for (
int digits=1; digits<10 && aNewName.isEmpty(); digits++)
1185 const int rangeStart = pow(10, digits - 1);
1186 const int rangeEnd = pow(10, digits);
1188 for (
int i=rangeStart;
i<rangeEnd && aNewName.isEmpty();
i++)
1190 aNewName = OUString::Concat(rOriginalName.subView(0, MAX_TAB_NAME_LENGTH - 1 - digits)) +
"-" + OUString::number(
i);
1191 if (aNewTabNames.end() != std::find(aNewTabNames.begin(), aNewTabNames.end(), aNewName) ||
1192 aOriginalTabNames.end() != std::find(aOriginalTabNames.begin(), aOriginalTabNames.end(), aNewName))
1200 if (!aNewName.isEmpty())
1204 aNewTabNames.push_back(aNewName);
1209 aNewTabNames.push_back(rOriginalName);
1215 aNewTabNames.push_back(rOriginalName);
1227 const OUString& rOriginalName = aOriginalTabNames[nTab];
1229 OUString rModifiedName;
1230 rDoc.
GetName(nTab, rModifiedName);
1232 if (rOriginalName != rModifiedName)
virtual const oox::drawingml::Theme * getCurrentTheme() const override
This class stores an unformatted or formatted string for Excel export.
const sal_uInt8 EXC_ERR_NULL
DDE application-topic delimiter.
void GetSaltDigest(sal_uInt8 pnSaltDigest[16]) const
void EnableIdle(bool bDo)
virtual oox::vml::Drawing * getVmlDrawing() override
bool InitCodec(const css::uno::Sequence< css::beans::NamedValue > &aData)
void StartContinue()
Writes CONTINUE header, internal setup.
SC_DLLPUBLIC void Format(OStringBuffer &r, ScRefFlags nFlags, const ScDocument *pDocument=nullptr, const Details &rDetails=detailsOOOa1) const
std::size_t Write(const void *pData, std::size_t nBytes)
Writes nBytes bytes from memory.
static void GetFormulaTypeAndValue(ScFormulaCell &rCell, const char *&sType, OUString &rValue)
static OString ToOString(const Color &rColor)
void SetGrammar(const formula::FormulaGrammar::Grammar eGrammar)
OUString getString() const
sal_uInt8 mnCharSet
Windows font family.
Stores global buffers and data needed for Excel export filter.
virtual bool InitCipher(sal_uInt32 nCounter) override
sal_uInt8 GetAlpha() const
const sal_uInt8 EXC_ERR_NA
sal_uInt16 mnCurrSize
Record size written in last record header.
bool mbShadow
true = Outlined.
void SetEncrypter(XclExpEncrypterRef const &xEncrypter)
OUString ScResId(TranslateId aId)
virtual bool importDocument() noexcept override
SvStream & WriteUInt16(sal_uInt16 nUInt16)
This class is used to export Excel record streams.
std::unique_ptr< ScRefreshTimerControl > const & GetRefreshTimerControlAddress() const
SvStream & WriteInt32(sal_Int32 nInt32)
static void CopyInputToOutput(const css::uno::Reference< css::io::XInputStream > &xInput, const css::uno::Reference< css::io::XOutputStream > &xOutput)
sal_uInt16 mnMaxContSize
Maximum size of record content.
static OUString ToOUString(const char *s)
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 getImplementationName() override
std::shared_ptr< TableStyleList > TableStyleListPtr
sal_uInt16 mnCurrMaxSize
Maximum size of CONTINUE content.
static const AllSettings & GetSettings()
virtual bool exportDocument() override
bool mbInRec
Stream position of size field in current header.
This struct helps reading and writing Excel fonts.
SvxEscapement GetScEscapement() const
Returns the Calc escapement style.
bool HasValidEncrypter() const
#define STREAM_SEEK_TO_END
sal_uInt16 mnHeight
Font color.
sal_uInt64 Seek(sal_uInt64 nPos)
std::shared_ptr< XclExpBiff8Encrypter > XclExpEncrypterRef
const sal_uInt16 EXC_ENCR_BLOCKSIZE
rtl_TextEncoding getBestTextEncodingFromLocale(const css::lang::Locale &rLocale)
css::uno::Reference< css::io::XOutputStream > openFragmentStream(const OUString &rStreamName, const OUString &rMediaType)
const sal_uInt16 EXC_MAXRECSIZE_BIFF8
void EncryptBytes(SvStream &rStrm,::std::vector< sal_uInt8 > &aBytes)
::msfilter::MSCodec_Std97 maCodec
sal_uInt16 mnMaxSliceSize
Current maximum, either mnMaxRecSize or mnMaxContSize.
XclExpXmlStream(const css::uno::Reference< css::uno::XComponentContext > &rCC, bool bExportVBA, bool bExportTemplate)
sal_uInt16 mnSliceSize
Count of bytes already written in current record.
virtual ~XclExpXmlStream() override
RootData & GetOldRoot() const
Returns old RootData struct.
void Encrypt(SvStream &rStrm, sal_uInt8 nData)
SfxApplication * SfxGetpApp()
const SCCOL EXC_MAXCOL_XML_2007
sax_fastparser::FSHelperPtr GetStreamForPath(const OUString &rPath)
const XclExpRoot * mpRoot
Access to global data from other classes.
static css::uno::Sequence< css::beans::NamedValue > GenerateDefaultEncryptionData()
SC_DLLPUBLIC bool RenameTab(SCTAB nTab, const OUString &rName, bool bExternalDocument=false)
void WriteExtOptions(ScExtDocOptions &rOpt) const
const SCROW EXC_MAXROW_XML_2007
const sal_uInt8 EXC_ERR_NUM
SC_DLLPUBLIC SCTAB GetTableCount() const
const sal_uInt16 EXC_ID_CONT
SvStream & WriteSChar(signed char nChar)
bool mbOutline
true = Struck out.
void PushStream(sax_fastparser::FSHelperPtr const &aStream)
static sax_fastparser::FSHelperPtr WriteFontData(sax_fastparser::FSHelperPtr pStream, const XclFontData &rFontData, sal_Int32 nNameId)
void push_back(const ScRange &rRange)
bool IsAutoCalcShellDisabled() const
void WriteAttribute(sal_Int32 nAttr, std::u16string_view sVal)
SvStream & WriteUInt32(sal_uInt32 nUInt32)
void validateTabNames(std::vector< OUString > &aOriginalTabNames)
ScDocShell * getDocShell()
const XclExpRoot & mrRoot
Reference to the system output stream.
sal_uInt16 mnHeaderSize
Maximum size of data slices (parts that cannot be split).
sal_uInt64 remainingSize()
bool mbItalic
Underline style.
sax_fastparser::FSHelperPtr & GetCurrentStream()
static ScRange lcl_ToRange(const XclRange &rRange)
OUString getRelationship(Relationship eRelationship)
sal_uInt8 GetBlue() const
void UpdateRecSize()
Rewrites correct record length, if different from calculated.
bool getOutputStream(ProgramOptions const &options, OString const &extension, std::ostream **ppOutputStream, OString &targetSourceFileName, OString &tmpSourceFileName)
const sal_uInt8 EXC_ERR_REF
void SetSliceSize(sal_uInt16 nSize)
Sets data slice length.
static const char * lcl_GetErrorString(FormulaError nScErrCode)
constexpr OUStringLiteral aData
void Init(const css::uno::Sequence< css::beans::NamedValue > &aEncryptionData)
XclExpEncrypterRef mxEncrypter
void CreateSaltDigest(const sal_uInt8 nSaltData[16], sal_uInt8 nSaltDigest[16])
static sal_uInt32 GetBlockPos(std::size_t nStrmPos)
::sax_fastparser::FSHelperPtr openFragmentStreamWithSerializer(const OUString &rStreamName, const OUString &rMediaType)
MS Excel 5.0, MS Excel 7.0 (95)
void restoreTabNames(const std::vector< OUString > &aOriginalTabNames)
std::size_t mnPredictSize
Count of bytes already written in current slice.
XclExpXmlPathToStateMap maOpenedStreamMap
const sal_uInt8 EXC_ERR_VALUE
ScExtDocOptions & GetExtDocOptions() const
Returns the extended document options.
sax_fastparser::FSHelperPtr CreateOutputStream(const OUString &sFullStream, std::u16string_view sRelativeStream, const css::uno::Reference< css::io::XOutputStream > &xParentRelation, const char *sContentType, std::u16string_view sRelationshipType, OUString *pRelationshipId=nullptr)
SfxObjectShell * GetEmbeddedObject() const
virtual oox::drawingml::chart::ChartConverter * getChartConverter() override
OUString Format(const ScDocument &rDocument, ScRefFlags nFlags=ScRefFlags::ZERO, const ScAddress::Details &rDetails=ScAddress::detailsOOOa1, bool bFullAddressNotation=false) const
Returns string with formatted cell range from aStart to aEnd, according to provided address conventio...
sal_uInt8 mpnSaltDigest[16]
bool Encode(const void *pData, std::size_t nDatLen, sal_uInt8 *pBuffer, std::size_t nBufLen)
A 2D cell range address list with Excel column and row indexes.
std::size_t WriteBytes(const void *pData, std::size_t nSize)
void EndRecord()
Checks and corrects real record length.
const css::uno::Reference< css::uno::XComponentContext > & getComponentContext() const
const SCTAB EXC_MAXTAB_XML_2007
sal_uInt8 mpnDocId[16]
Crypto algorithm implementation.
virtual ::oox::ole::VbaProject * implCreateVbaProject() const override
const ScfUInt16Vec & GetUnicodeBuffer() const
void GetDocId(sal_uInt8 pnDocId[16]) const
const sal_uInt8 EXC_STRF_16BIT
A 2D cell address struct with Excel column and row indexes.
XclExpStream & operator<<(sal_Int8 nValue)
void CopyFromStream(SvStream &rInStrm, sal_uInt64 nBytes=STREAM_SEEK_TO_END)
Copies nBytes bytes from current position of the stream rInStrm.
static ScViewData * GetViewData()
std::shared_ptr< FastSerializerHelper > FSHelperPtr
static sal_uInt16 GetOffsetInBlock(std::size_t nStrmPos)
void WriteByteString(const OString &rString)
Writes string length field and OString buffer.
const css::uno::Reference< css::frame::XModel > & getModel() const
static void lcl_WriteValue(const sax_fastparser::FSHelperPtr &rStream, sal_Int32 nElement, const char *pValue)
void SetSvStreamPos(sal_uInt64 nPos)
Sets position of system stream (only allowed outside of records).
std::size_t ReadBytes(void *pData, std::size_t nSize)
static OUString GetStreamName(const char *sStreamDir, const char *sStream, sal_Int32 nId)
std::stack< sax_fastparser::FSHelperPtr > maStreams
const LanguageTag & getLocale()
sal_uInt8 GetGreen() const
const OUString & getFileUrl() const
static const char * lcl_GetUnderlineStyle(FontLineStyle eUnderline, bool &bHaveUnderline)
std::unique_ptr< char[]> aBuffer
FontLineStyle GetScUnderline() const
Returns the Calc font underline style.
void WriteZeroBytesToRecord(std::size_t nBytes)
void GetSalt(sal_uInt8 pnSalt[16]) const
void InitRecord(sal_uInt16 nRecId)
Writes header data, internal setup.
XclExpStream(SvStream &rOutStrm, const XclExpRoot &rRoot, sal_uInt16 nMaxRecSize=0)
Constructs the Excel record export stream.
static ScAddress lcl_ToAddress(const XclAddress &rAddress)
bool IsRich() const
Returns true, if the string contains formatting information.
const sal_uInt8 EXC_ERR_NAME
bool VerifyKey(const sal_uInt8 *pSaltData, const sal_uInt8 *pSaltDigest)
sal_uInt8 mnFamily
Escapement type.
SvStream & WriteFloat(float nFloat)
virtual oox::drawingml::table::TableStyleListPtr getTableStyles() override
const css::uno::Reference< css::task::XStatusIndicator > & getStatusIndicator() const
std::size_t mnLastSizePos
Predicted size received from calling function.
SvStream & WriteUChar(unsigned char nChar)
void WriteRawZeroBytes(std::size_t nBytes)
Writes a raw sequence of zero bytes.
sal_uInt16 mnWeight
Font height in twips (1/20 of a point).
void UpdateSizeVars(std::size_t nSize)
Recalculates mnCurrSize and mnSliceSize.
SvStream & WriteInt16(sal_Int16 nInt16)
const sal_uInt8 EXC_ERR_DIV0
const sal_uInt16 EXC_MAXRECSIZE_BIFF5
css::uno::Sequence< css::beans::NamedValue > GetEncryptionData() const
void SetAutoCalcShellDisabled(bool bNew)
const ScDocument & GetDocument() const
void WriteCharBuffer(const ScfUInt8Vec &rBuffer)
Writes 8-bit character buffer.
XclBiff GetBiff() const
Returns the current BIFF version of the importer/exporter.
bool mbValid
Last known stream position.
void renameTab(SCTAB aTab, OUString aNewName)
void commitStorage() const
void StartRecord(sal_uInt16 nRecId, std::size_t nRecSize)
Starts a new record: writes header data, stores calculated record size.
void WriteXml(XclExpXmlStream &)
void exportVBA(SotStorage *pRootStorage)
Reference< XModel > xModel
Color maColor
String with styles (bold, italic).
void EnableEncryption(bool bEnable=true)
SvStream & WriteDouble(const double &rDouble)
bool Skip(std::size_t nDatLen)
static const char * lcl_ToVerticalAlignmentRun(SvxEscapement eEscapement, bool &bHaveAlignment)
void GetDocId(sal_uInt8 pDocId[16])
bool containsVBAProject()
void WriteUnicodeBuffer(const ScfUInt16Vec &rBuffer, sal_uInt8 nFlags)
Writes Unicode buffer as 8/16 bit, repeats nFlags at start of a CONTINUE record.
bool mbStrikeout
true = Italic.
XclExpBiff8Encrypter(const XclExpRoot &rRoot)
bool IsIdleEnabled() const
OUString addRelation(const OUString &rType, std::u16string_view rTarget)
SC_DLLPUBLIC bool GetName(SCTAB nTab, OUString &rName) const
A 2D cell range address struct with Excel column and row indexes.
bool mbUseEncrypter
Filter root data.
void WriteZeroBytes(std::size_t nBytes)
Writes a sequence of nBytes zero bytes (respects slice setting).
bool m_bDetectedRangeSegmentation false
sal_uInt16 PrepareWrite()
Creates CONTINUE record at end of record.
SfxMedium * GetMedium() const