Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
E
Excelize
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Operations
Operations
Metrics
Analytics
Analytics
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
Globars Forks
Excelize
Commits
1cbb05d4
Unverified
Commit
1cbb05d4
authored
Jun 28, 2020
by
xuri
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
GetCols support the row element without r attribute in the worksheet
parent
48f19f60
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
46 additions
and
32 deletions
+46
-32
cell_test.go
cell_test.go
+3
-0
col.go
col.go
+35
-20
rows.go
rows.go
+8
-12
No files found.
cell_test.go
View file @
1cbb05d4
...
...
@@ -110,6 +110,9 @@ func TestGetCellValue(t *testing.T) {
assert
.
Equal
(
t
,
cell
,
value
)
assert
.
NoError
(
t
,
err
)
}
cols
,
err
:=
f
.
GetCols
(
"Sheet1"
)
assert
.
Equal
(
t
,
[][]
string
{{
""
,
""
,
"A3"
,
"A4"
,
""
,
""
,
"A7"
,
"A8"
},
{
""
,
""
,
""
,
"B4"
,
""
,
""
,
"B7"
,
"B8"
}},
cols
)
assert
.
NoError
(
t
,
err
)
}
func
TestGetCellFormula
(
t
*
testing
.
T
)
{
...
...
col.go
View file @
1cbb05d4
...
...
@@ -48,8 +48,8 @@ type Cols struct {
// return
// }
// for _, col := range cols {
// for _,
col
Cell := range col {
// fmt.Print
ln(col
Cell, "\t")
// for _,
row
Cell := range col {
// fmt.Print
(row
Cell, "\t")
// }
// fmt.Println()
// }
...
...
@@ -99,24 +99,34 @@ func (cols *Cols) Rows() ([]string, error) {
switch
startElement
:=
token
.
(
type
)
{
case
xml
.
StartElement
:
inElement
=
startElement
.
Name
.
Local
if
inElement
==
"row"
{
cellCol
=
0
cellRow
++
for
_
,
attr
:=
range
startElement
.
Attr
{
if
attr
.
Name
.
Local
==
"r"
{
cellRow
,
_
=
strconv
.
Atoi
(
attr
.
Value
)
}
}
}
if
inElement
==
"c"
{
cellCol
++
for
_
,
attr
:=
range
startElement
.
Attr
{
if
attr
.
Name
.
Local
==
"r"
{
if
cellCol
,
cellRow
,
err
=
CellNameToCoordinates
(
attr
.
Value
);
err
!=
nil
{
return
rows
,
err
}
blank
:=
cellRow
-
len
(
rows
)
for
i
:=
1
;
i
<
blank
;
i
++
{
rows
=
append
(
rows
,
""
)
}
if
cellCol
==
cols
.
curCol
{
colCell
:=
xlsxC
{}
_
=
decoder
.
DecodeElement
(
&
colCell
,
&
startElement
)
val
,
_
:=
colCell
.
getValueFrom
(
cols
.
f
,
d
)
rows
=
append
(
rows
,
val
)
}
}
}
blank
:=
cellRow
-
len
(
rows
)
for
i
:=
1
;
i
<
blank
;
i
++
{
rows
=
append
(
rows
,
""
)
}
if
cellCol
==
cols
.
curCol
{
colCell
:=
xlsxC
{}
_
=
decoder
.
DecodeElement
(
&
colCell
,
&
startElement
)
val
,
_
:=
colCell
.
getValueFrom
(
cols
.
f
,
d
)
rows
=
append
(
rows
,
val
)
}
}
}
}
...
...
@@ -152,10 +162,10 @@ func (f *File) Cols(sheet string) (*Cols, error) {
f
.
saveFileList
(
name
,
replaceRelationshipsNameSpaceBytes
(
output
))
}
var
(
inElement
string
cols
Cols
cellCol
int
err
error
inElement
string
cols
Cols
cellCol
,
curRow
,
row
int
err
error
)
cols
.
sheetXML
=
f
.
readXML
(
name
)
decoder
:=
f
.
xmlNewDecoder
(
bytes
.
NewReader
(
cols
.
sheetXML
))
...
...
@@ -168,25 +178,30 @@ func (f *File) Cols(sheet string) (*Cols, error) {
case
xml
.
StartElement
:
inElement
=
startElement
.
Name
.
Local
if
inElement
==
"row"
{
row
++
for
_
,
attr
:=
range
startElement
.
Attr
{
if
attr
.
Name
.
Local
==
"r"
{
if
c
ols
.
total
Row
,
err
=
strconv
.
Atoi
(
attr
.
Value
);
err
!=
nil
{
if
c
ur
Row
,
err
=
strconv
.
Atoi
(
attr
.
Value
);
err
!=
nil
{
return
&
cols
,
err
}
row
=
curRow
}
}
cols
.
totalRow
=
row
cellCol
=
0
}
if
inElement
==
"c"
{
cellCol
++
for
_
,
attr
:=
range
startElement
.
Attr
{
if
attr
.
Name
.
Local
==
"r"
{
if
cellCol
,
_
,
err
=
CellNameToCoordinates
(
attr
.
Value
);
err
!=
nil
{
return
&
cols
,
err
}
if
cellCol
>
cols
.
totalCol
{
cols
.
totalCol
=
cellCol
}
}
}
if
cellCol
>
cols
.
totalCol
{
cols
.
totalCol
=
cellCol
}
}
}
}
...
...
rows.go
View file @
1cbb05d4
...
...
@@ -32,7 +32,7 @@ import (
// }
// for _, row := range rows {
// for _, colCell := range row {
// fmt.Print
ln
(colCell, "\t")
// fmt.Print(colCell, "\t")
// }
// fmt.Println()
// }
...
...
@@ -111,6 +111,7 @@ func (rows *Rows) Columns() ([]string, error) {
}
}
if
inElement
==
"c"
{
cellCol
++
colCell
:=
xlsxC
{}
_
=
rows
.
decoder
.
DecodeElement
(
&
colCell
,
&
startElement
)
if
colCell
.
R
!=
""
{
...
...
@@ -118,8 +119,6 @@ func (rows *Rows) Columns() ([]string, error) {
if
err
!=
nil
{
return
columns
,
err
}
}
else
{
cellCol
++
}
blank
:=
cellCol
-
len
(
columns
)
for
i
:=
1
;
i
<
blank
;
i
++
{
...
...
@@ -177,10 +176,10 @@ func (f *File) Rows(sheet string) (*Rows, error) {
f
.
saveFileList
(
name
,
replaceRelationshipsNameSpaceBytes
(
output
))
}
var
(
err
error
inElement
string
row
,
curRow
int
rows
Rows
err
error
inElement
string
row
int
rows
Rows
)
decoder
:=
f
.
xmlNewDecoder
(
bytes
.
NewReader
(
f
.
readXML
(
name
)))
for
{
...
...
@@ -192,18 +191,15 @@ func (f *File) Rows(sheet string) (*Rows, error) {
case
xml
.
StartElement
:
inElement
=
startElement
.
Name
.
Local
if
inElement
==
"row"
{
row
++
for
_
,
attr
:=
range
startElement
.
Attr
{
if
attr
.
Name
.
Local
==
"r"
{
curR
ow
,
err
=
strconv
.
Atoi
(
attr
.
Value
)
r
ow
,
err
=
strconv
.
Atoi
(
attr
.
Value
)
if
err
!=
nil
{
return
&
rows
,
err
}
row
=
curRow
}
}
if
len
(
startElement
.
Attr
)
==
0
{
row
++
}
rows
.
totalRow
=
row
}
default
:
...
...
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