Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xuri
excelize
提交
e37e060d
excelize
项目概览
xuri
/
excelize
通知
13
Star
2
Fork
4
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
excelize
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
已验证
提交
e37e060d
编写于
12月 31, 2021
作者:
xurime
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
This closes #1107, stream writer will create a time number format for time type cells
Unit test coverage improved
上级
c5990ea3
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
33 addition
and
27 deletion
+33
-27
cell.go
cell.go
+2
-4
stream.go
stream.go
+8
-3
stream_test.go
stream_test.go
+23
-20
未找到文件。
cell.go
浏览文件 @
e37e060d
...
...
@@ -228,8 +228,7 @@ func setCellTime(value time.Time) (t string, b string, isNum bool, err error) {
var
excelTime
float64
_
,
offset
:=
value
.
In
(
value
.
Location
())
.
Zone
()
value
=
value
.
Add
(
time
.
Duration
(
offset
)
*
time
.
Second
)
excelTime
,
err
=
timeToExcelTime
(
value
)
if
err
!=
nil
{
if
excelTime
,
err
=
timeToExcelTime
(
value
);
err
!=
nil
{
return
}
isNum
=
excelTime
>
0
...
...
@@ -419,8 +418,7 @@ func setCellStr(value string) (t string, v string, ns xml.Attr) {
}
}
}
t
=
"str"
v
=
bstrMarshal
(
value
)
t
,
v
=
"str"
,
bstrMarshal
(
value
)
return
}
...
...
stream.go
浏览文件 @
e37e060d
...
...
@@ -341,7 +341,7 @@ func (sw *StreamWriter) SetRow(axis string, values []interface{}, opts ...RowOpt
val
=
v
.
Value
setCellFormula
(
&
c
,
v
.
Formula
)
}
if
err
=
setCellValFunc
(
&
c
,
val
);
err
!=
nil
{
if
err
=
s
w
.
s
etCellValFunc
(
&
c
,
val
);
err
!=
nil
{
_
,
_
=
sw
.
rawData
.
WriteString
(
`</row>`
)
return
err
}
...
...
@@ -424,7 +424,7 @@ func setCellFormula(c *xlsxC, formula string) {
}
// setCellValFunc provides a function to set value of a cell.
func
setCellValFunc
(
c
*
xlsxC
,
val
interface
{})
(
err
error
)
{
func
(
sw
*
StreamWriter
)
setCellValFunc
(
c
*
xlsxC
,
val
interface
{})
(
err
error
)
{
switch
val
:=
val
.
(
type
)
{
case
int
,
int8
,
int16
,
int32
,
int64
,
uint
,
uint8
,
uint16
,
uint32
,
uint64
:
err
=
setCellIntFunc
(
c
,
val
)
...
...
@@ -439,7 +439,12 @@ func setCellValFunc(c *xlsxC, val interface{}) (err error) {
case
time
.
Duration
:
c
.
T
,
c
.
V
=
setCellDuration
(
val
)
case
time
.
Time
:
c
.
T
,
c
.
V
,
_
,
err
=
setCellTime
(
val
)
var
isNum
bool
c
.
T
,
c
.
V
,
isNum
,
err
=
setCellTime
(
val
)
if
isNum
&&
c
.
S
==
0
{
style
,
_
:=
sw
.
File
.
NewStyle
(
&
Style
{
NumFmt
:
22
})
c
.
S
=
style
}
case
bool
:
c
.
T
,
c
.
V
=
setCellBool
(
val
)
case
nil
:
...
...
stream_test.go
浏览文件 @
e37e060d
...
...
@@ -58,7 +58,7 @@ func TestStreamWriter(t *testing.T) {
assert
.
NoError
(
t
,
streamWriter
.
SetRow
(
"A4"
,
[]
interface
{}{
Cell
{
StyleID
:
styleID
},
Cell
{
Formula
:
"SUM(A10,B10)"
}}),
RowOpts
{
Height
:
45
,
StyleID
:
styleID
})
assert
.
NoError
(
t
,
streamWriter
.
SetRow
(
"A5"
,
[]
interface
{}{
&
Cell
{
StyleID
:
styleID
,
Value
:
"cell"
},
&
Cell
{
Formula
:
"SUM(A10,B10)"
}}))
assert
.
NoError
(
t
,
streamWriter
.
SetRow
(
"A6"
,
[]
interface
{}{
time
.
Now
()}))
assert
.
NoError
(
t
,
streamWriter
.
SetRow
(
"A7"
,
nil
,
RowOpts
{
H
idden
:
true
}))
assert
.
NoError
(
t
,
streamWriter
.
SetRow
(
"A7"
,
nil
,
RowOpts
{
H
eight
:
20
,
Hidden
:
true
,
StyleID
:
styleID
}))
assert
.
EqualError
(
t
,
streamWriter
.
SetRow
(
"A7"
,
nil
,
RowOpts
{
Height
:
MaxRowHeight
+
1
}),
ErrMaxRowHeight
.
Error
())
for
rowID
:=
10
;
rowID
<=
51200
;
rowID
++
{
...
...
@@ -208,24 +208,27 @@ func TestSetRow(t *testing.T) {
}
func
TestSetCellValFunc
(
t
*
testing
.
T
)
{
f
:=
NewFile
()
sw
,
err
:=
f
.
NewStreamWriter
(
"Sheet1"
)
assert
.
NoError
(
t
,
err
)
c
:=
&
xlsxC
{}
assert
.
NoError
(
t
,
setCellValFunc
(
c
,
128
))
assert
.
NoError
(
t
,
setCellValFunc
(
c
,
int8
(
-
128
)))
assert
.
NoError
(
t
,
setCellValFunc
(
c
,
int16
(
-
32768
)))
assert
.
NoError
(
t
,
setCellValFunc
(
c
,
int32
(
-
2147483648
)))
assert
.
NoError
(
t
,
setCellValFunc
(
c
,
int64
(
-
9223372036854775808
)))
assert
.
NoError
(
t
,
setCellValFunc
(
c
,
uint
(
128
)))
assert
.
NoError
(
t
,
setCellValFunc
(
c
,
uint8
(
255
)))
assert
.
NoError
(
t
,
setCellValFunc
(
c
,
uint16
(
65535
)))
assert
.
NoError
(
t
,
setCellValFunc
(
c
,
uint32
(
4294967295
)))
assert
.
NoError
(
t
,
setCellValFunc
(
c
,
uint64
(
18446744073709551615
)))
assert
.
NoError
(
t
,
setCellValFunc
(
c
,
float32
(
100.1588
)))
assert
.
NoError
(
t
,
setCellValFunc
(
c
,
float64
(
100.1588
)))
assert
.
NoError
(
t
,
setCellValFunc
(
c
,
" Hello"
))
assert
.
NoError
(
t
,
setCellValFunc
(
c
,
[]
byte
(
" Hello"
)))
assert
.
NoError
(
t
,
setCellValFunc
(
c
,
time
.
Now
()
.
UTC
()))
assert
.
NoError
(
t
,
setCellValFunc
(
c
,
time
.
Duration
(
1e13
)))
assert
.
NoError
(
t
,
setCellValFunc
(
c
,
true
))
assert
.
NoError
(
t
,
setCellValFunc
(
c
,
nil
))
assert
.
NoError
(
t
,
setCellValFunc
(
c
,
complex64
(
5
+
10i
)))
assert
.
NoError
(
t
,
s
w
.
s
etCellValFunc
(
c
,
128
))
assert
.
NoError
(
t
,
s
w
.
s
etCellValFunc
(
c
,
int8
(
-
128
)))
assert
.
NoError
(
t
,
s
w
.
s
etCellValFunc
(
c
,
int16
(
-
32768
)))
assert
.
NoError
(
t
,
s
w
.
s
etCellValFunc
(
c
,
int32
(
-
2147483648
)))
assert
.
NoError
(
t
,
s
w
.
s
etCellValFunc
(
c
,
int64
(
-
9223372036854775808
)))
assert
.
NoError
(
t
,
s
w
.
s
etCellValFunc
(
c
,
uint
(
128
)))
assert
.
NoError
(
t
,
s
w
.
s
etCellValFunc
(
c
,
uint8
(
255
)))
assert
.
NoError
(
t
,
s
w
.
s
etCellValFunc
(
c
,
uint16
(
65535
)))
assert
.
NoError
(
t
,
s
w
.
s
etCellValFunc
(
c
,
uint32
(
4294967295
)))
assert
.
NoError
(
t
,
s
w
.
s
etCellValFunc
(
c
,
uint64
(
18446744073709551615
)))
assert
.
NoError
(
t
,
s
w
.
s
etCellValFunc
(
c
,
float32
(
100.1588
)))
assert
.
NoError
(
t
,
s
w
.
s
etCellValFunc
(
c
,
float64
(
100.1588
)))
assert
.
NoError
(
t
,
s
w
.
s
etCellValFunc
(
c
,
" Hello"
))
assert
.
NoError
(
t
,
s
w
.
s
etCellValFunc
(
c
,
[]
byte
(
" Hello"
)))
assert
.
NoError
(
t
,
s
w
.
s
etCellValFunc
(
c
,
time
.
Now
()
.
UTC
()))
assert
.
NoError
(
t
,
s
w
.
s
etCellValFunc
(
c
,
time
.
Duration
(
1e13
)))
assert
.
NoError
(
t
,
s
w
.
s
etCellValFunc
(
c
,
true
))
assert
.
NoError
(
t
,
s
w
.
s
etCellValFunc
(
c
,
nil
))
assert
.
NoError
(
t
,
s
w
.
s
etCellValFunc
(
c
,
complex64
(
5
+
10i
)))
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录