Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xuri
excelize
提交
9a685537
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 搜索 >>
未验证
提交
9a685537
编写于
1月 29, 2024
作者:
云浩舟
提交者:
GitHub
1月 29, 2024
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
This closes #1792, support to update defined names reference when rename worksheet (#1797)
上级
e4497c49
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
52 addition
and
0 deletion
+52
-0
adjust.go
adjust.go
+27
-0
sheet.go
sheet.go
+6
-0
sheet_test.go
sheet_test.go
+19
-0
未找到文件。
adjust.go
浏览文件 @
9a685537
...
...
@@ -454,6 +454,33 @@ func (f *File) adjustFormulaRef(sheet, sheetN, formula string, keepRelative bool
return
val
,
nil
}
// adjustRangeSheetName returns replaced range reference by given source and
// target sheet name.
func
adjustRangeSheetName
(
rng
,
source
,
target
string
)
string
{
cellRefs
:=
strings
.
Split
(
rng
,
","
)
for
i
,
cellRef
:=
range
cellRefs
{
rangeRefs
:=
strings
.
Split
(
cellRef
,
":"
)
for
j
,
rangeRef
:=
range
rangeRefs
{
parts
:=
strings
.
Split
(
rangeRef
,
"!"
)
for
k
,
part
:=
range
parts
{
singleQuote
:=
strings
.
HasPrefix
(
part
,
"'"
)
&&
strings
.
HasSuffix
(
part
,
"'"
)
if
singleQuote
{
part
=
strings
.
TrimPrefix
(
strings
.
TrimSuffix
(
part
,
"'"
),
"'"
)
}
if
part
==
source
{
if
part
=
target
;
singleQuote
{
part
=
"'"
+
part
+
"'"
}
}
parts
[
k
]
=
part
}
rangeRefs
[
j
]
=
strings
.
Join
(
parts
,
"!"
)
}
cellRefs
[
i
]
=
strings
.
Join
(
rangeRefs
,
":"
)
}
return
strings
.
Join
(
cellRefs
,
","
)
}
// arrayFormulaOperandToken defines meta fields for transforming the array
// formula to the normal formula.
type
arrayFormulaOperandToken
struct
{
...
...
sheet.go
浏览文件 @
9a685537
...
...
@@ -374,6 +374,12 @@ func (f *File) SetSheetName(source, target string) error {
delete
(
f
.
sheetMap
,
source
)
}
}
if
wb
.
DefinedNames
==
nil
{
return
err
}
for
i
,
dn
:=
range
wb
.
DefinedNames
.
DefinedName
{
wb
.
DefinedNames
.
DefinedName
[
i
]
.
Data
=
adjustRangeSheetName
(
dn
.
Data
,
source
,
target
)
}
return
err
}
...
...
sheet_test.go
浏览文件 @
9a685537
...
...
@@ -467,6 +467,25 @@ func TestSetSheetName(t *testing.T) {
assert
.
Equal
(
t
,
"Sheet1"
,
f
.
GetSheetName
(
0
))
// Test set sheet name with invalid sheet name
assert
.
EqualError
(
t
,
f
.
SetSheetName
(
"Sheet:1"
,
"Sheet1"
),
ErrSheetNameInvalid
.
Error
())
// Test set worksheet name with existing defined name and auto filter
assert
.
NoError
(
t
,
f
.
AutoFilter
(
"Sheet1"
,
"A1:A2"
,
nil
))
assert
.
NoError
(
t
,
f
.
SetDefinedName
(
&
DefinedName
{
Name
:
"Name1"
,
RefersTo
:
"$B$2"
,
}))
assert
.
NoError
(
t
,
f
.
SetDefinedName
(
&
DefinedName
{
Name
:
"Name2"
,
RefersTo
:
"$A1$2:A2"
,
}))
assert
.
NoError
(
t
,
f
.
SetDefinedName
(
&
DefinedName
{
Name
:
"Name3"
,
RefersTo
:
"Sheet1!$A$1:'Sheet1'!A1:Sheet1!$A$1,Sheet1!A1:Sheet3!A1,Sheet3!A1"
,
}))
assert
.
NoError
(
t
,
f
.
SetSheetName
(
"Sheet1"
,
"Sheet2"
))
for
i
,
expected
:=
range
[]
string
{
"'Sheet2'!$A$1:$A$2"
,
"$B$2"
,
"$A1$2:A2"
,
"Sheet2!$A$1:'Sheet2'!A1:Sheet2!$A$1,Sheet2!A1:Sheet3!A1,Sheet3!A1"
}
{
assert
.
Equal
(
t
,
expected
,
f
.
WorkBook
.
DefinedNames
.
DefinedName
[
i
]
.
Data
)
}
}
func
TestWorksheetWriter
(
t
*
testing
.
T
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录