Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
core
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
LibreOffice
core
Commits
9a4881a1
Kaydet (Commit)
9a4881a1
authored
Haz 24, 2015
tarafından
Eike Rathke
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
TableRef: read <table><tableColumns><tableColumn> from OOXML
Change-Id: I46c57a14fd94738e51e65c482c903c2debe868b8
üst
6055eb2c
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
410 additions
and
2 deletions
+410
-2
Library_scfilt.mk
sc/Library_scfilt.mk
+2
-0
tablebuffer.hxx
sc/source/filter/inc/tablebuffer.hxx
+7
-0
tablecolumnsbuffer.hxx
sc/source/filter/inc/tablecolumnsbuffer.hxx
+96
-0
tablecolumnscontext.hxx
sc/source/filter/inc/tablecolumnscontext.hxx
+68
-0
tablebuffer.cxx
sc/source/filter/oox/tablebuffer.cxx
+1
-0
tablecolumnsbuffer.cxx
sc/source/filter/oox/tablecolumnsbuffer.cxx
+133
-0
tablecolumnscontext.cxx
sc/source/filter/oox/tablecolumnscontext.cxx
+94
-0
tablefragment.cxx
sc/source/filter/oox/tablefragment.cxx
+9
-2
No files found.
sc/Library_scfilt.mk
Dosyayı görüntüle @
9a4881a1
...
...
@@ -207,6 +207,8 @@ $(eval $(call gb_Library_add_exception_objects,scfilt,\
sc/source/filter/oox/stylesbuffer \
sc/source/filter/oox/stylesfragment \
sc/source/filter/oox/tablebuffer \
sc/source/filter/oox/tablecolumnsbuffer \
sc/source/filter/oox/tablecolumnscontext \
sc/source/filter/oox/tablefragment \
sc/source/filter/oox/themebuffer \
sc/source/filter/oox/unitconverter \
...
...
sc/source/filter/inc/tablebuffer.hxx
Dosyayı görüntüle @
9a4881a1
...
...
@@ -22,6 +22,7 @@
#include <com/sun/star/table/CellRangeAddress.hpp>
#include "autofilterbuffer.hxx"
#include "tablecolumnsbuffer.hxx"
#include "workbookhelper.hxx"
namespace
oox
{
...
...
@@ -52,10 +53,13 @@ public:
void
importTable
(
SequenceInputStream
&
rStrm
,
sal_Int16
nSheet
);
/** Creates a new auto filter and stores it internally. */
inline
AutoFilter
&
createAutoFilter
()
{
return
maAutoFilters
.
createAutoFilter
();
}
/** Creates a new tableColumns handler and stores it internally. */
inline
TableColumns
&
createTableColumns
()
{
return
maTableColumns
.
createTableColumns
();
}
/** Creates a database range from this tables. */
void
finalizeImport
();
void
applyAutoFilters
();
void
applyTableColumns
();
/** Returns the unique table identifier. */
inline
sal_Int32
getTableId
()
const
{
return
maModel
.
mnId
;
}
...
...
@@ -80,6 +84,7 @@ public:
private
:
TableModel
maModel
;
AutoFilterBuffer
maAutoFilters
;
/// Filter settings for this table.
TableColumnsBuffer
maTableColumns
;
/// Column names of this table.
OUString
maDBRangeName
;
/// Name of the databae range in the Calc document.
::
com
::
sun
::
star
::
table
::
CellRangeAddress
maDestRange
;
/// Validated range of the table in the worksheet.
...
...
@@ -100,6 +105,8 @@ public:
void
finalizeImport
();
/** Applies autofilters from created database range ( requires finalizeImport to have run before being called */
void
applyAutoFilters
();
/** Applies columns names from created database range ( requires finalizeImport to have run before being called */
void
applyTableColumns
();
/** Returns a table by its identifier. */
TableRef
getTable
(
sal_Int32
nTableId
)
const
;
/** Returns a table by its display name. */
...
...
sc/source/filter/inc/tablecolumnsbuffer.hxx
0 → 100644
Dosyayı görüntüle @
9a4881a1
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef INCLUDED_SC_SOURCE_FILTER_INC_TABLECOLUMNSBUFFER_HXX
#define INCLUDED_SC_SOURCE_FILTER_INC_TABLECOLUMNSBUFFER_HXX
#include <oox/helper/refvector.hxx>
#include "workbookhelper.hxx"
namespace
oox
{
namespace
xls
{
/** A column in a table (database range).
*/
class
TableColumn
:
public
WorkbookHelper
{
public
:
explicit
TableColumn
(
const
WorkbookHelper
&
rHelper
);
/** Imports table column settings from the tableColumn element. */
void
importTableColumn
(
const
AttributeList
&
rAttribs
);
/** Imports table column settings from the TABLECOLUMN (?) record. */
void
importTableColumn
(
SequenceInputStream
&
rStrm
);
private
:
OUString
maName
;
sal_Int32
mnId
;
sal_Int32
mnDataDxfId
;
};
class
TableColumns
:
public
WorkbookHelper
{
public
:
explicit
TableColumns
(
const
WorkbookHelper
&
rHelper
);
/** Imports settings from the tableColumns element. */
void
importTableColumns
(
const
AttributeList
&
rAttribs
);
/** Imports settings from the TABLECOLUMNS (?) record. */
void
importTableColumns
(
SequenceInputStream
&
rStrm
);
/** Creates a new table column and stores it internally. */
TableColumn
&
createTableColumn
();
/** Applies the columns to the passed database range descriptor. */
bool
finalizeImport
(
const
::
com
::
sun
::
star
::
uno
::
Reference
<
::
com
::
sun
::
star
::
sheet
::
XDatabaseRange
>&
rxDatabaseRange
);
private
:
typedef
RefVector
<
TableColumn
>
TableColumnVector
;
TableColumnVector
maTableColumnVector
;
sal_Int32
mnCount
;
};
class
TableColumnsBuffer
:
public
WorkbookHelper
{
public
:
explicit
TableColumnsBuffer
(
const
WorkbookHelper
&
rHelper
);
/** Creates a new table columns object and stores it internally. */
TableColumns
&
createTableColumns
();
/** Applies the table columns to the passed database range object.
@return True = this buffer contains valid table column settings. */
bool
finalizeImport
(
const
::
com
::
sun
::
star
::
uno
::
Reference
<
::
com
::
sun
::
star
::
sheet
::
XDatabaseRange
>&
rxDatabaseRange
);
private
:
/** Returns the table columns object used. */
TableColumns
*
getActiveTableColumns
();
private
:
typedef
RefVector
<
TableColumns
>
TableColumnsVector
;
TableColumnsVector
maTableColumnsVector
;
};
}
// namespace xls
}
// namespace oox
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
sc/source/filter/inc/tablecolumnscontext.hxx
0 → 100644
Dosyayı görüntüle @
9a4881a1
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef INCLUDED_SC_SOURCE_FILTER_INC_TABLECOLUMNSCONTEXT_HXX
#define INCLUDED_SC_SOURCE_FILTER_INC_TABLECOLUMNSCONTEXT_HXX
#include "excelhandlers.hxx"
namespace
oox
{
namespace
xls
{
class
TableColumn
;
class
TableColumns
;
class
TableColumnContext
:
public
WorksheetContextBase
{
public
:
explicit
TableColumnContext
(
WorksheetContextBase
&
rParent
,
TableColumn
&
rTableColumn
);
protected
:
virtual
::
oox
::
core
::
ContextHandlerRef
onCreateContext
(
sal_Int32
nElement
,
const
AttributeList
&
rAttribs
)
SAL_OVERRIDE
;
virtual
void
onStartElement
(
const
AttributeList
&
rAttribs
)
SAL_OVERRIDE
;
virtual
::
oox
::
core
::
ContextHandlerRef
onCreateRecordContext
(
sal_Int32
nRecId
,
SequenceInputStream
&
rStrm
)
SAL_OVERRIDE
;
virtual
void
onStartRecord
(
SequenceInputStream
&
rStrm
)
SAL_OVERRIDE
;
private
:
TableColumn
&
mrTableColumn
;
};
class
TableColumnsContext
:
public
WorksheetContextBase
{
public
:
explicit
TableColumnsContext
(
WorksheetFragmentBase
&
rFragment
,
TableColumns
&
rTableColumns
);
protected
:
virtual
::
oox
::
core
::
ContextHandlerRef
onCreateContext
(
sal_Int32
nElement
,
const
AttributeList
&
rAttribs
)
SAL_OVERRIDE
;
virtual
void
onStartElement
(
const
AttributeList
&
rAttribs
)
SAL_OVERRIDE
;
virtual
::
oox
::
core
::
ContextHandlerRef
onCreateRecordContext
(
sal_Int32
nRecId
,
SequenceInputStream
&
rStrm
)
SAL_OVERRIDE
;
virtual
void
onStartRecord
(
SequenceInputStream
&
rStrm
)
SAL_OVERRIDE
;
private
:
TableColumns
&
mrTableColumns
;
};
}
// namespace xls
}
// namespace oox
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
sc/source/filter/oox/tablebuffer.cxx
Dosyayı görüntüle @
9a4881a1
...
...
@@ -46,6 +46,7 @@ TableModel::TableModel() :
Table
::
Table
(
const
WorkbookHelper
&
rHelper
)
:
WorkbookHelper
(
rHelper
),
maAutoFilters
(
rHelper
),
maTableColumns
(
rHelper
),
mnTokenIndex
(
-
1
)
{
}
...
...
sc/source/filter/oox/tablecolumnsbuffer.cxx
0 → 100644
Dosyayı görüntüle @
9a4881a1
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#include "tablecolumnsbuffer.hxx"
#include <com/sun/star/sheet/XDatabaseRange.hpp>
#include <rtl/ustrbuf.hxx>
#include <osl/diagnose.h>
#include <oox/helper/attributelist.hxx>
#include <oox/helper/containerhelper.hxx>
#include <oox/helper/propertyset.hxx>
#include <oox/token/properties.hxx>
#include "addressconverter.hxx"
#include "biffinputstream.hxx"
#include "defnamesbuffer.hxx"
namespace
oox
{
namespace
xls
{
using
namespace
::
com
::
sun
::
star
::
sheet
;
using
namespace
::
com
::
sun
::
star
::
table
;
using
namespace
::
com
::
sun
::
star
::
uno
;
TableColumn
::
TableColumn
(
const
WorkbookHelper
&
rHelper
)
:
WorkbookHelper
(
rHelper
),
mnId
(
-
1
),
mnDataDxfId
(
-
1
)
{
}
void
TableColumn
::
importTableColumn
(
const
AttributeList
&
rAttribs
)
{
mnId
=
rAttribs
.
getInteger
(
XML_id
,
-
1
);
maName
=
rAttribs
.
getString
(
XML_name
,
OUString
()
);
mnDataDxfId
=
rAttribs
.
getInteger
(
XML_dataDxfId
,
-
1
);
}
void
TableColumn
::
importTableColumn
(
SequenceInputStream
&
/*rStrm*/
)
{
/* XXX not implemented */
}
TableColumns
::
TableColumns
(
const
WorkbookHelper
&
rHelper
)
:
WorkbookHelper
(
rHelper
),
mnCount
(
0
)
{
}
void
TableColumns
::
importTableColumns
(
const
AttributeList
&
rAttribs
)
{
mnCount
=
rAttribs
.
getInteger
(
XML_count
,
0
);
}
void
TableColumns
::
importTableColumns
(
SequenceInputStream
&
/*rStrm*/
)
{
/* XXX not implemented */
}
TableColumn
&
TableColumns
::
createTableColumn
()
{
TableColumnVector
::
value_type
xTableColumn
(
new
TableColumn
(
*
this
)
);
maTableColumnVector
.
push_back
(
xTableColumn
);
return
*
xTableColumn
;
}
bool
TableColumns
::
finalizeImport
(
const
Reference
<
XDatabaseRange
>&
rxDatabaseRange
)
{
SAL_WARN_IF
(
static_cast
<
size_t
>
(
mnCount
)
!=
maTableColumnVector
.
size
(),
"sc.filter"
,
"TableColumns::finalizeImport - count attribute doesn't match number of tableColumn elements"
);
if
(
rxDatabaseRange
.
is
()
)
{
/* TODO: implementation */
return
true
;
}
return
false
;
}
TableColumnsBuffer
::
TableColumnsBuffer
(
const
WorkbookHelper
&
rHelper
)
:
WorkbookHelper
(
rHelper
)
{
}
TableColumns
&
TableColumnsBuffer
::
createTableColumns
()
{
TableColumnsVector
::
value_type
xTableColumns
(
new
TableColumns
(
*
this
)
);
maTableColumnsVector
.
push_back
(
xTableColumns
);
return
*
xTableColumns
;
}
bool
TableColumnsBuffer
::
finalizeImport
(
const
Reference
<
XDatabaseRange
>&
rxDatabaseRange
)
{
TableColumns
*
pTableColumns
=
getActiveTableColumns
();
if
(
pTableColumns
&&
rxDatabaseRange
.
is
()
)
try
{
pTableColumns
->
finalizeImport
(
rxDatabaseRange
);
// return true to indicate available table columns
return
true
;
}
catch
(
Exception
&
)
{
}
return
false
;
}
TableColumns
*
TableColumnsBuffer
::
getActiveTableColumns
()
{
// not more than one table columns descriptor per table
SAL_WARN_IF
(
maTableColumnsVector
.
size
()
>
1
,
"sc.filter"
,
"TableColumnsBuffer::getActiveTableColumns - too many table columns"
);
// stick to the last imported table columns
return
maTableColumnsVector
.
empty
()
?
0
:
maTableColumnsVector
.
back
().
get
();
}
}
// namespace xls
}
// namespace oox
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
sc/source/filter/oox/tablecolumnscontext.cxx
0 → 100644
Dosyayı görüntüle @
9a4881a1
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#include "tablecolumnscontext.hxx"
#include "tablecolumnsbuffer.hxx"
#include "biffinputstream.hxx"
namespace
oox
{
namespace
xls
{
using
::
oox
::
core
::
ContextHandlerRef
;
TableColumnContext
::
TableColumnContext
(
WorksheetContextBase
&
rParent
,
TableColumn
&
rTableColumn
)
:
WorksheetContextBase
(
rParent
),
mrTableColumn
(
rTableColumn
)
{
}
ContextHandlerRef
TableColumnContext
::
onCreateContext
(
sal_Int32
/*nElement*/
,
const
AttributeList
&
/*rAttribs*/
)
{
/* no known child elements */
return
0
;
}
void
TableColumnContext
::
onStartElement
(
const
AttributeList
&
rAttribs
)
{
mrTableColumn
.
importTableColumn
(
rAttribs
);
}
ContextHandlerRef
TableColumnContext
::
onCreateRecordContext
(
sal_Int32
/*nRecId*/
,
SequenceInputStream
&
/*rStrm*/
)
{
/* no known child elements */
return
0
;
}
void
TableColumnContext
::
onStartRecord
(
SequenceInputStream
&
rStrm
)
{
mrTableColumn
.
importTableColumn
(
rStrm
);
}
TableColumnsContext
::
TableColumnsContext
(
WorksheetFragmentBase
&
rFragment
,
TableColumns
&
rTableColumns
)
:
WorksheetContextBase
(
rFragment
),
mrTableColumns
(
rTableColumns
)
{
}
ContextHandlerRef
TableColumnsContext
::
onCreateContext
(
sal_Int32
nElement
,
const
AttributeList
&
/*rAttribs*/
)
{
if
(
(
getCurrentElement
()
==
XLS_TOKEN
(
tableColumns
))
&&
(
nElement
==
XLS_TOKEN
(
tableColumn
))
)
return
new
TableColumnContext
(
*
this
,
mrTableColumns
.
createTableColumn
()
);
return
0
;
}
void
TableColumnsContext
::
onStartElement
(
const
AttributeList
&
rAttribs
)
{
mrTableColumns
.
importTableColumns
(
rAttribs
);
}
ContextHandlerRef
TableColumnsContext
::
onCreateRecordContext
(
sal_Int32
/*nRecId*/
,
SequenceInputStream
&
/*rStrm*/
)
{
/* XXX not implemented */
#if 0
if( (getCurrentElement() == BIFF12_ID_TABLECOLUMNS) && (nRecId == BIFF12_ID_TABLECOLUMN) )
return new TableColumnContext( *this, mrTableColumns.createTableColumn() );
#endif
return
0
;
}
void
TableColumnsContext
::
onStartRecord
(
SequenceInputStream
&
rStrm
)
{
mrTableColumns
.
importTableColumns
(
rStrm
);
}
}
// namespace xls
}
// namespace oox
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
sc/source/filter/oox/tablefragment.cxx
Dosyayı görüntüle @
9a4881a1
...
...
@@ -21,6 +21,8 @@
#include "autofilterbuffer.hxx"
#include "autofiltercontext.hxx"
#include "tablecolumnsbuffer.hxx"
#include "tablecolumnscontext.hxx"
#include "tablebuffer.hxx"
namespace
oox
{
...
...
@@ -46,8 +48,13 @@ ContextHandlerRef TableFragment::onCreateContext( sal_Int32 nElement, const Attr
}
break
;
case
XLS_TOKEN
(
table
)
:
if
(
nElement
==
XLS_TOKEN
(
autoFilter
)
)
return
new
AutoFilterContext
(
*
this
,
mrTable
.
createAutoFilter
()
);
switch
(
nElement
)
{
case
XLS_TOKEN
(
autoFilter
):
return
new
AutoFilterContext
(
*
this
,
mrTable
.
createAutoFilter
()
);
case
XLS_TOKEN
(
tableColumns
):
return
new
TableColumnsContext
(
*
this
,
mrTable
.
createTableColumns
()
);
}
break
;
}
return
0
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment