1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_sc.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir 32*cdf0e10cSrcweir 33*cdf0e10cSrcweir #include "global.hxx" 34*cdf0e10cSrcweir #include "scresid.hxx" 35*cdf0e10cSrcweir #include "impex.hxx" 36*cdf0e10cSrcweir #include "asciiopt.hxx" 37*cdf0e10cSrcweir #include "asciiopt.hrc" 38*cdf0e10cSrcweir #include <tools/debug.hxx> 39*cdf0e10cSrcweir #include <rtl/tencinfo.h> 40*cdf0e10cSrcweir #include <unotools/transliterationwrapper.hxx> 41*cdf0e10cSrcweir // ause 42*cdf0e10cSrcweir #include "editutil.hxx" 43*cdf0e10cSrcweir 44*cdf0e10cSrcweir // ============================================================================ 45*cdf0e10cSrcweir 46*cdf0e10cSrcweir static const sal_Char __FAR_DATA pStrFix[] = "FIX"; 47*cdf0e10cSrcweir static const sal_Char __FAR_DATA pStrMrg[] = "MRG"; 48*cdf0e10cSrcweir 49*cdf0e10cSrcweir 50*cdf0e10cSrcweir // ============================================================================ 51*cdf0e10cSrcweir 52*cdf0e10cSrcweir ScAsciiOptions::ScAsciiOptions() : 53*cdf0e10cSrcweir bFixedLen ( sal_False ), 54*cdf0e10cSrcweir aFieldSeps ( ';' ), 55*cdf0e10cSrcweir bMergeFieldSeps ( sal_False ), 56*cdf0e10cSrcweir bQuotedFieldAsText(false), 57*cdf0e10cSrcweir bDetectSpecialNumber(false), 58*cdf0e10cSrcweir cTextSep ( cDefaultTextSep ), 59*cdf0e10cSrcweir eCharSet ( gsl_getSystemTextEncoding() ), 60*cdf0e10cSrcweir eLang ( LANGUAGE_SYSTEM ), 61*cdf0e10cSrcweir bCharSetSystem ( sal_False ), 62*cdf0e10cSrcweir nStartRow ( 1 ), 63*cdf0e10cSrcweir nInfoCount ( 0 ), 64*cdf0e10cSrcweir pColStart ( NULL ), 65*cdf0e10cSrcweir pColFormat ( NULL ) 66*cdf0e10cSrcweir { 67*cdf0e10cSrcweir } 68*cdf0e10cSrcweir 69*cdf0e10cSrcweir 70*cdf0e10cSrcweir ScAsciiOptions::ScAsciiOptions(const ScAsciiOptions& rOpt) : 71*cdf0e10cSrcweir bFixedLen ( rOpt.bFixedLen ), 72*cdf0e10cSrcweir aFieldSeps ( rOpt.aFieldSeps ), 73*cdf0e10cSrcweir bMergeFieldSeps ( rOpt.bMergeFieldSeps ), 74*cdf0e10cSrcweir bQuotedFieldAsText(rOpt.bQuotedFieldAsText), 75*cdf0e10cSrcweir bDetectSpecialNumber(rOpt.bDetectSpecialNumber), 76*cdf0e10cSrcweir cTextSep ( rOpt.cTextSep ), 77*cdf0e10cSrcweir eCharSet ( rOpt.eCharSet ), 78*cdf0e10cSrcweir eLang ( rOpt.eLang ), 79*cdf0e10cSrcweir bCharSetSystem ( rOpt.bCharSetSystem ), 80*cdf0e10cSrcweir nStartRow ( rOpt.nStartRow ), 81*cdf0e10cSrcweir nInfoCount ( rOpt.nInfoCount ) 82*cdf0e10cSrcweir { 83*cdf0e10cSrcweir if (nInfoCount) 84*cdf0e10cSrcweir { 85*cdf0e10cSrcweir pColStart = new xub_StrLen[nInfoCount]; 86*cdf0e10cSrcweir pColFormat = new sal_uInt8[nInfoCount]; 87*cdf0e10cSrcweir for (sal_uInt16 i=0; i<nInfoCount; i++) 88*cdf0e10cSrcweir { 89*cdf0e10cSrcweir pColStart[i] = rOpt.pColStart[i]; 90*cdf0e10cSrcweir pColFormat[i] = rOpt.pColFormat[i]; 91*cdf0e10cSrcweir } 92*cdf0e10cSrcweir } 93*cdf0e10cSrcweir else 94*cdf0e10cSrcweir { 95*cdf0e10cSrcweir pColStart = NULL; 96*cdf0e10cSrcweir pColFormat = NULL; 97*cdf0e10cSrcweir } 98*cdf0e10cSrcweir } 99*cdf0e10cSrcweir 100*cdf0e10cSrcweir 101*cdf0e10cSrcweir ScAsciiOptions::~ScAsciiOptions() 102*cdf0e10cSrcweir { 103*cdf0e10cSrcweir delete[] pColStart; 104*cdf0e10cSrcweir delete[] pColFormat; 105*cdf0e10cSrcweir } 106*cdf0e10cSrcweir 107*cdf0e10cSrcweir 108*cdf0e10cSrcweir void ScAsciiOptions::SetColInfo( sal_uInt16 nCount, const xub_StrLen* pStart, const sal_uInt8* pFormat ) 109*cdf0e10cSrcweir { 110*cdf0e10cSrcweir delete[] pColStart; 111*cdf0e10cSrcweir delete[] pColFormat; 112*cdf0e10cSrcweir 113*cdf0e10cSrcweir nInfoCount = nCount; 114*cdf0e10cSrcweir 115*cdf0e10cSrcweir if (nInfoCount) 116*cdf0e10cSrcweir { 117*cdf0e10cSrcweir pColStart = new xub_StrLen[nInfoCount]; 118*cdf0e10cSrcweir pColFormat = new sal_uInt8[nInfoCount]; 119*cdf0e10cSrcweir for (sal_uInt16 i=0; i<nInfoCount; i++) 120*cdf0e10cSrcweir { 121*cdf0e10cSrcweir pColStart[i] = pStart[i]; 122*cdf0e10cSrcweir pColFormat[i] = pFormat[i]; 123*cdf0e10cSrcweir } 124*cdf0e10cSrcweir } 125*cdf0e10cSrcweir else 126*cdf0e10cSrcweir { 127*cdf0e10cSrcweir pColStart = NULL; 128*cdf0e10cSrcweir pColFormat = NULL; 129*cdf0e10cSrcweir } 130*cdf0e10cSrcweir } 131*cdf0e10cSrcweir 132*cdf0e10cSrcweir 133*cdf0e10cSrcweir void ScAsciiOptions::SetColumnInfo( const ScCsvExpDataVec& rDataVec ) 134*cdf0e10cSrcweir { 135*cdf0e10cSrcweir delete[] pColStart; 136*cdf0e10cSrcweir pColStart = NULL; 137*cdf0e10cSrcweir delete[] pColFormat; 138*cdf0e10cSrcweir pColFormat = NULL; 139*cdf0e10cSrcweir 140*cdf0e10cSrcweir nInfoCount = static_cast< sal_uInt16 >( rDataVec.size() ); 141*cdf0e10cSrcweir if( nInfoCount ) 142*cdf0e10cSrcweir { 143*cdf0e10cSrcweir pColStart = new xub_StrLen[ nInfoCount ]; 144*cdf0e10cSrcweir pColFormat = new sal_uInt8[ nInfoCount ]; 145*cdf0e10cSrcweir for( sal_uInt16 nIx = 0; nIx < nInfoCount; ++nIx ) 146*cdf0e10cSrcweir { 147*cdf0e10cSrcweir pColStart[ nIx ] = rDataVec[ nIx ].mnIndex; 148*cdf0e10cSrcweir pColFormat[ nIx ] = rDataVec[ nIx ].mnType; 149*cdf0e10cSrcweir } 150*cdf0e10cSrcweir } 151*cdf0e10cSrcweir } 152*cdf0e10cSrcweir 153*cdf0e10cSrcweir 154*cdf0e10cSrcweir ScAsciiOptions& ScAsciiOptions::operator=( const ScAsciiOptions& rCpy ) 155*cdf0e10cSrcweir { 156*cdf0e10cSrcweir SetColInfo( rCpy.nInfoCount, rCpy.pColStart, rCpy.pColFormat ); 157*cdf0e10cSrcweir 158*cdf0e10cSrcweir bFixedLen = rCpy.bFixedLen; 159*cdf0e10cSrcweir aFieldSeps = rCpy.aFieldSeps; 160*cdf0e10cSrcweir bMergeFieldSeps = rCpy.bMergeFieldSeps; 161*cdf0e10cSrcweir bQuotedFieldAsText = rCpy.bQuotedFieldAsText; 162*cdf0e10cSrcweir cTextSep = rCpy.cTextSep; 163*cdf0e10cSrcweir eCharSet = rCpy.eCharSet; 164*cdf0e10cSrcweir bCharSetSystem = rCpy.bCharSetSystem; 165*cdf0e10cSrcweir nStartRow = rCpy.nStartRow; 166*cdf0e10cSrcweir 167*cdf0e10cSrcweir return *this; 168*cdf0e10cSrcweir } 169*cdf0e10cSrcweir 170*cdf0e10cSrcweir 171*cdf0e10cSrcweir sal_Bool ScAsciiOptions::operator==( const ScAsciiOptions& rCmp ) const 172*cdf0e10cSrcweir { 173*cdf0e10cSrcweir if ( bFixedLen == rCmp.bFixedLen && 174*cdf0e10cSrcweir aFieldSeps == rCmp.aFieldSeps && 175*cdf0e10cSrcweir bMergeFieldSeps == rCmp.bMergeFieldSeps && 176*cdf0e10cSrcweir bQuotedFieldAsText == rCmp.bQuotedFieldAsText && 177*cdf0e10cSrcweir cTextSep == rCmp.cTextSep && 178*cdf0e10cSrcweir eCharSet == rCmp.eCharSet && 179*cdf0e10cSrcweir bCharSetSystem == rCmp.bCharSetSystem && 180*cdf0e10cSrcweir nStartRow == rCmp.nStartRow && 181*cdf0e10cSrcweir nInfoCount == rCmp.nInfoCount ) 182*cdf0e10cSrcweir { 183*cdf0e10cSrcweir DBG_ASSERT( !nInfoCount || (pColStart && pColFormat && rCmp.pColStart && rCmp.pColFormat), 184*cdf0e10cSrcweir "0-Zeiger in ScAsciiOptions" ); 185*cdf0e10cSrcweir for (sal_uInt16 i=0; i<nInfoCount; i++) 186*cdf0e10cSrcweir if ( pColStart[i] != rCmp.pColStart[i] || 187*cdf0e10cSrcweir pColFormat[i] != rCmp.pColFormat[i] ) 188*cdf0e10cSrcweir return sal_False; 189*cdf0e10cSrcweir 190*cdf0e10cSrcweir return sal_True; 191*cdf0e10cSrcweir } 192*cdf0e10cSrcweir return sal_False; 193*cdf0e10cSrcweir } 194*cdf0e10cSrcweir 195*cdf0e10cSrcweir // 196*cdf0e10cSrcweir // Der Options-String darf kein Semikolon mehr enthalten (wegen Pickliste) 197*cdf0e10cSrcweir // darum ab Version 336 Komma stattdessen 198*cdf0e10cSrcweir // 199*cdf0e10cSrcweir 200*cdf0e10cSrcweir 201*cdf0e10cSrcweir void ScAsciiOptions::ReadFromString( const String& rString ) 202*cdf0e10cSrcweir { 203*cdf0e10cSrcweir xub_StrLen nCount = rString.GetTokenCount(','); 204*cdf0e10cSrcweir String aToken; 205*cdf0e10cSrcweir xub_StrLen nSub; 206*cdf0e10cSrcweir xub_StrLen i; 207*cdf0e10cSrcweir 208*cdf0e10cSrcweir // 209*cdf0e10cSrcweir // Feld-Trenner 210*cdf0e10cSrcweir // 211*cdf0e10cSrcweir 212*cdf0e10cSrcweir if ( nCount >= 1 ) 213*cdf0e10cSrcweir { 214*cdf0e10cSrcweir bFixedLen = bMergeFieldSeps = sal_False; 215*cdf0e10cSrcweir aFieldSeps.Erase(); 216*cdf0e10cSrcweir 217*cdf0e10cSrcweir aToken = rString.GetToken(0,','); 218*cdf0e10cSrcweir if ( aToken.EqualsAscii(pStrFix) ) 219*cdf0e10cSrcweir bFixedLen = sal_True; 220*cdf0e10cSrcweir nSub = aToken.GetTokenCount('/'); 221*cdf0e10cSrcweir for ( i=0; i<nSub; i++ ) 222*cdf0e10cSrcweir { 223*cdf0e10cSrcweir String aCode = aToken.GetToken( i, '/' ); 224*cdf0e10cSrcweir if ( aCode.EqualsAscii(pStrMrg) ) 225*cdf0e10cSrcweir bMergeFieldSeps = sal_True; 226*cdf0e10cSrcweir else 227*cdf0e10cSrcweir { 228*cdf0e10cSrcweir sal_Int32 nVal = aCode.ToInt32(); 229*cdf0e10cSrcweir if ( nVal ) 230*cdf0e10cSrcweir aFieldSeps += (sal_Unicode) nVal; 231*cdf0e10cSrcweir } 232*cdf0e10cSrcweir } 233*cdf0e10cSrcweir } 234*cdf0e10cSrcweir 235*cdf0e10cSrcweir // 236*cdf0e10cSrcweir // Text-Trenner 237*cdf0e10cSrcweir // 238*cdf0e10cSrcweir 239*cdf0e10cSrcweir if ( nCount >= 2 ) 240*cdf0e10cSrcweir { 241*cdf0e10cSrcweir aToken = rString.GetToken(1,','); 242*cdf0e10cSrcweir sal_Int32 nVal = aToken.ToInt32(); 243*cdf0e10cSrcweir cTextSep = (sal_Unicode) nVal; 244*cdf0e10cSrcweir } 245*cdf0e10cSrcweir 246*cdf0e10cSrcweir // 247*cdf0e10cSrcweir // Zeichensatz 248*cdf0e10cSrcweir // 249*cdf0e10cSrcweir 250*cdf0e10cSrcweir if ( nCount >= 3 ) 251*cdf0e10cSrcweir { 252*cdf0e10cSrcweir aToken = rString.GetToken(2,','); 253*cdf0e10cSrcweir eCharSet = ScGlobal::GetCharsetValue( aToken ); 254*cdf0e10cSrcweir } 255*cdf0e10cSrcweir 256*cdf0e10cSrcweir // 257*cdf0e10cSrcweir // Startzeile 258*cdf0e10cSrcweir // 259*cdf0e10cSrcweir 260*cdf0e10cSrcweir if ( nCount >= 4 ) 261*cdf0e10cSrcweir { 262*cdf0e10cSrcweir aToken = rString.GetToken(3,','); 263*cdf0e10cSrcweir nStartRow = aToken.ToInt32(); 264*cdf0e10cSrcweir } 265*cdf0e10cSrcweir 266*cdf0e10cSrcweir // 267*cdf0e10cSrcweir // Spalten-Infos 268*cdf0e10cSrcweir // 269*cdf0e10cSrcweir 270*cdf0e10cSrcweir if ( nCount >= 5 ) 271*cdf0e10cSrcweir { 272*cdf0e10cSrcweir delete[] pColStart; 273*cdf0e10cSrcweir delete[] pColFormat; 274*cdf0e10cSrcweir 275*cdf0e10cSrcweir aToken = rString.GetToken(4,','); 276*cdf0e10cSrcweir nSub = aToken.GetTokenCount('/'); 277*cdf0e10cSrcweir nInfoCount = nSub / 2; 278*cdf0e10cSrcweir if (nInfoCount) 279*cdf0e10cSrcweir { 280*cdf0e10cSrcweir pColStart = new xub_StrLen[nInfoCount]; 281*cdf0e10cSrcweir pColFormat = new sal_uInt8[nInfoCount]; 282*cdf0e10cSrcweir for (sal_uInt16 nInfo=0; nInfo<nInfoCount; nInfo++) 283*cdf0e10cSrcweir { 284*cdf0e10cSrcweir pColStart[nInfo] = (xub_StrLen) aToken.GetToken( 2*nInfo, '/' ).ToInt32(); 285*cdf0e10cSrcweir pColFormat[nInfo] = (sal_uInt8) aToken.GetToken( 2*nInfo+1, '/' ).ToInt32(); 286*cdf0e10cSrcweir } 287*cdf0e10cSrcweir } 288*cdf0e10cSrcweir else 289*cdf0e10cSrcweir { 290*cdf0e10cSrcweir pColStart = NULL; 291*cdf0e10cSrcweir pColFormat = NULL; 292*cdf0e10cSrcweir } 293*cdf0e10cSrcweir } 294*cdf0e10cSrcweir 295*cdf0e10cSrcweir // Language 296*cdf0e10cSrcweir if (nCount >= 6) 297*cdf0e10cSrcweir { 298*cdf0e10cSrcweir aToken = rString.GetToken(5, ','); 299*cdf0e10cSrcweir eLang = static_cast<LanguageType>(aToken.ToInt32()); 300*cdf0e10cSrcweir } 301*cdf0e10cSrcweir 302*cdf0e10cSrcweir // Import quoted field as text. 303*cdf0e10cSrcweir if (nCount >= 7) 304*cdf0e10cSrcweir { 305*cdf0e10cSrcweir aToken = rString.GetToken(6, ','); 306*cdf0e10cSrcweir bQuotedFieldAsText = aToken.EqualsAscii("true") ? true : false; 307*cdf0e10cSrcweir } 308*cdf0e10cSrcweir 309*cdf0e10cSrcweir // Detect special nubmers. 310*cdf0e10cSrcweir if (nCount >= 8) 311*cdf0e10cSrcweir { 312*cdf0e10cSrcweir aToken = rString.GetToken(7, ','); 313*cdf0e10cSrcweir bDetectSpecialNumber = aToken.EqualsAscii("true") ? true : false; 314*cdf0e10cSrcweir } 315*cdf0e10cSrcweir else 316*cdf0e10cSrcweir bDetectSpecialNumber = sal_True; // default of versions that didn't add the parameter 317*cdf0e10cSrcweir 318*cdf0e10cSrcweir // 9th token is used for "Save as shown" in export options 319*cdf0e10cSrcweir } 320*cdf0e10cSrcweir 321*cdf0e10cSrcweir 322*cdf0e10cSrcweir String ScAsciiOptions::WriteToString() const 323*cdf0e10cSrcweir { 324*cdf0e10cSrcweir String aOutStr; 325*cdf0e10cSrcweir 326*cdf0e10cSrcweir // 327*cdf0e10cSrcweir // Feld-Trenner 328*cdf0e10cSrcweir // 329*cdf0e10cSrcweir 330*cdf0e10cSrcweir if ( bFixedLen ) 331*cdf0e10cSrcweir aOutStr.AppendAscii(pStrFix); 332*cdf0e10cSrcweir else if ( !aFieldSeps.Len() ) 333*cdf0e10cSrcweir aOutStr += '0'; 334*cdf0e10cSrcweir else 335*cdf0e10cSrcweir { 336*cdf0e10cSrcweir xub_StrLen nLen = aFieldSeps.Len(); 337*cdf0e10cSrcweir for (xub_StrLen i=0; i<nLen; i++) 338*cdf0e10cSrcweir { 339*cdf0e10cSrcweir if (i) 340*cdf0e10cSrcweir aOutStr += '/'; 341*cdf0e10cSrcweir aOutStr += String::CreateFromInt32(aFieldSeps.GetChar(i)); 342*cdf0e10cSrcweir } 343*cdf0e10cSrcweir if ( bMergeFieldSeps ) 344*cdf0e10cSrcweir { 345*cdf0e10cSrcweir aOutStr += '/'; 346*cdf0e10cSrcweir aOutStr.AppendAscii(pStrMrg); 347*cdf0e10cSrcweir } 348*cdf0e10cSrcweir } 349*cdf0e10cSrcweir 350*cdf0e10cSrcweir aOutStr += ','; // Token-Ende 351*cdf0e10cSrcweir 352*cdf0e10cSrcweir // 353*cdf0e10cSrcweir // Text-Trenner 354*cdf0e10cSrcweir // 355*cdf0e10cSrcweir 356*cdf0e10cSrcweir aOutStr += String::CreateFromInt32(cTextSep); 357*cdf0e10cSrcweir aOutStr += ','; // Token-Ende 358*cdf0e10cSrcweir 359*cdf0e10cSrcweir // 360*cdf0e10cSrcweir // Zeichensatz 361*cdf0e10cSrcweir // 362*cdf0e10cSrcweir 363*cdf0e10cSrcweir if ( bCharSetSystem ) // force "SYSTEM" 364*cdf0e10cSrcweir aOutStr += ScGlobal::GetCharsetString( RTL_TEXTENCODING_DONTKNOW ); 365*cdf0e10cSrcweir else 366*cdf0e10cSrcweir aOutStr += ScGlobal::GetCharsetString( eCharSet ); 367*cdf0e10cSrcweir aOutStr += ','; // Token-Ende 368*cdf0e10cSrcweir 369*cdf0e10cSrcweir // 370*cdf0e10cSrcweir // Startzeile 371*cdf0e10cSrcweir // 372*cdf0e10cSrcweir 373*cdf0e10cSrcweir aOutStr += String::CreateFromInt32(nStartRow); 374*cdf0e10cSrcweir aOutStr += ','; // Token-Ende 375*cdf0e10cSrcweir 376*cdf0e10cSrcweir // 377*cdf0e10cSrcweir // Spalten-Infos 378*cdf0e10cSrcweir // 379*cdf0e10cSrcweir 380*cdf0e10cSrcweir DBG_ASSERT( !nInfoCount || (pColStart && pColFormat), "0-Zeiger in ScAsciiOptions" ); 381*cdf0e10cSrcweir for (sal_uInt16 nInfo=0; nInfo<nInfoCount; nInfo++) 382*cdf0e10cSrcweir { 383*cdf0e10cSrcweir if (nInfo) 384*cdf0e10cSrcweir aOutStr += '/'; 385*cdf0e10cSrcweir aOutStr += String::CreateFromInt32(pColStart[nInfo]); 386*cdf0e10cSrcweir aOutStr += '/'; 387*cdf0e10cSrcweir aOutStr += String::CreateFromInt32(pColFormat[nInfo]); 388*cdf0e10cSrcweir } 389*cdf0e10cSrcweir 390*cdf0e10cSrcweir // #i112025# the options string is used in macros and linked sheets, 391*cdf0e10cSrcweir // so new options must be added at the end, to remain compatible 392*cdf0e10cSrcweir 393*cdf0e10cSrcweir aOutStr += ','; 394*cdf0e10cSrcweir 395*cdf0e10cSrcweir // Language 396*cdf0e10cSrcweir aOutStr += String::CreateFromInt32(eLang); 397*cdf0e10cSrcweir aOutStr += ','; 398*cdf0e10cSrcweir 399*cdf0e10cSrcweir // Import quoted field as text. 400*cdf0e10cSrcweir aOutStr += String::CreateFromAscii(bQuotedFieldAsText ? "true" : "false"); 401*cdf0e10cSrcweir aOutStr += ','; 402*cdf0e10cSrcweir 403*cdf0e10cSrcweir // Detect special nubmers. 404*cdf0e10cSrcweir aOutStr += String::CreateFromAscii(bDetectSpecialNumber ? "true" : "false"); 405*cdf0e10cSrcweir 406*cdf0e10cSrcweir // 9th token is used for "Save as shown" in export options 407*cdf0e10cSrcweir 408*cdf0e10cSrcweir return aOutStr; 409*cdf0e10cSrcweir } 410*cdf0e10cSrcweir 411*cdf0e10cSrcweir #if 0 412*cdf0e10cSrcweir // Code, um die Spalten-Liste aus einem Excel-kompatiblen String zu erzeugen: 413*cdf0e10cSrcweir // (im Moment nicht benutzt) 414*cdf0e10cSrcweir 415*cdf0e10cSrcweir void ScAsciiOptions::InterpretColumnList( const String& rString ) 416*cdf0e10cSrcweir { 417*cdf0e10cSrcweir // Eingabe ist 1-basiert, pColStart fuer FixedLen ist 0-basiert 418*cdf0e10cSrcweir 419*cdf0e10cSrcweir // Kommas durch Semikolon ersetzen 420*cdf0e10cSrcweir 421*cdf0e10cSrcweir String aSemiStr = rString; 422*cdf0e10cSrcweir sal_uInt16 nPos = 0; 423*cdf0e10cSrcweir do 424*cdf0e10cSrcweir nPos = aSemiStr.SearchAndReplace( ',', ';', nPos ); 425*cdf0e10cSrcweir while ( nPos != STRING_NOTFOUND ); 426*cdf0e10cSrcweir 427*cdf0e10cSrcweir // Eintraege sortieren 428*cdf0e10cSrcweir 429*cdf0e10cSrcweir sal_uInt16 nCount = aSemiStr.GetTokenCount(); 430*cdf0e10cSrcweir sal_uInt16* pTemp = new sal_uInt16[nCount+1]; 431*cdf0e10cSrcweir pTemp[0] = 1; // erste Spalte faengt immer bei 1 an 432*cdf0e10cSrcweir sal_uInt16 nFound = 1; 433*cdf0e10cSrcweir sal_uInt16 i,j; 434*cdf0e10cSrcweir for (i=0; i<nCount; i++) 435*cdf0e10cSrcweir { 436*cdf0e10cSrcweir sal_uInt16 nVal = (sal_uInt16) aSemiStr.GetToken(i); 437*cdf0e10cSrcweir if (nVal) 438*cdf0e10cSrcweir { 439*cdf0e10cSrcweir sal_Bool bThere = sal_False; 440*cdf0e10cSrcweir nPos = 0; 441*cdf0e10cSrcweir for (j=0; j<nFound; j++) 442*cdf0e10cSrcweir { 443*cdf0e10cSrcweir if ( pTemp[j] == nVal ) 444*cdf0e10cSrcweir bThere = sal_True; 445*cdf0e10cSrcweir else if ( pTemp[j] < nVal ) 446*cdf0e10cSrcweir nPos = j+1; 447*cdf0e10cSrcweir } 448*cdf0e10cSrcweir if ( !bThere ) 449*cdf0e10cSrcweir { 450*cdf0e10cSrcweir if ( nPos < nFound ) 451*cdf0e10cSrcweir memmove( &pTemp[nPos+1], &pTemp[nPos], (nFound-nPos)*sizeof(sal_uInt16) ); 452*cdf0e10cSrcweir pTemp[nPos] = nVal; 453*cdf0e10cSrcweir ++nFound; 454*cdf0e10cSrcweir } 455*cdf0e10cSrcweir } 456*cdf0e10cSrcweir } 457*cdf0e10cSrcweir 458*cdf0e10cSrcweir // Eintraege uebernehmen 459*cdf0e10cSrcweir 460*cdf0e10cSrcweir delete[] pColStart; 461*cdf0e10cSrcweir delete[] pColFormat; 462*cdf0e10cSrcweir nInfoCount = nFound; 463*cdf0e10cSrcweir if (nInfoCount) 464*cdf0e10cSrcweir { 465*cdf0e10cSrcweir pColStart = new sal_uInt16[nInfoCount]; 466*cdf0e10cSrcweir pColFormat = new sal_uInt8[nInfoCount]; 467*cdf0e10cSrcweir for (i=0; i<nInfoCount; i++) 468*cdf0e10cSrcweir { 469*cdf0e10cSrcweir pColStart[i] = pTemp[i] - 1; 470*cdf0e10cSrcweir pColFormat[i] = SC_COL_STANDARD; 471*cdf0e10cSrcweir } 472*cdf0e10cSrcweir } 473*cdf0e10cSrcweir else 474*cdf0e10cSrcweir { 475*cdf0e10cSrcweir pColStart = NULL; 476*cdf0e10cSrcweir pColFormat = NULL; 477*cdf0e10cSrcweir } 478*cdf0e10cSrcweir 479*cdf0e10cSrcweir bFixedLen = sal_True; // sonst macht's keinen Sinn 480*cdf0e10cSrcweir 481*cdf0e10cSrcweir // aufraeumen 482*cdf0e10cSrcweir 483*cdf0e10cSrcweir delete[] pTemp; 484*cdf0e10cSrcweir } 485*cdf0e10cSrcweir #endif 486*cdf0e10cSrcweir 487