Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
此号慢热型
excelize
提交
b917466c
excelize
项目概览
此号慢热型
/
excelize
与 Fork 源项目一致
Fork自
xuri / excelize
通知
2
Star
0
Fork
0
代码
文件
提交
分支
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,发现更多精彩内容 >>
未验证
提交
b917466c
编写于
10月 27, 2018
作者:
xurime
提交者:
GitHub
10月 27, 2018
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #278 from peng/search-sheet
New function: `SearchSheet()`, relate issue #277
上级
90bdd363
e2e58a3a
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
51 addition
and
0 deletion
+51
-0
sheet.go
sheet.go
+51
-0
未找到文件。
sheet.go
浏览文件 @
b917466c
...
...
@@ -14,6 +14,7 @@ import (
"encoding/json"
"encoding/xml"
"errors"
"fmt"
"io/ioutil"
"os"
"path"
...
...
@@ -660,6 +661,56 @@ func (f *File) GetSheetVisible(name string) bool {
return
visible
}
// SearchSheet provides a function to get coordinates by given worksheet name
// and cell value. This function only supports exact match of strings and
// numbers, doesn't support the calculated result, formatted numbers and
// conditional lookup currently. If it is a merged cell, it will return the
// coordinates of the upper left corner of the merged area. For example,
// search the coordinates of the value of "100" on Sheet1:
//
// xlsx.SearchSheet("Sheet1", "100")
//
func
(
f
*
File
)
SearchSheet
(
sheet
,
value
string
)
[]
string
{
xlsx
:=
f
.
workSheetReader
(
sheet
)
result
:=
[]
string
{}
name
,
ok
:=
f
.
sheetMap
[
trimSheetName
(
sheet
)]
if
!
ok
{
return
result
}
if
xlsx
!=
nil
{
output
,
_
:=
xml
.
Marshal
(
f
.
Sheet
[
name
])
f
.
saveFileList
(
name
,
replaceWorkSheetsRelationshipsNameSpaceBytes
(
output
))
}
xml
.
NewDecoder
(
bytes
.
NewReader
(
f
.
readXML
(
name
)))
d
:=
f
.
sharedStringsReader
()
var
inElement
string
var
r
xlsxRow
decoder
:=
xml
.
NewDecoder
(
bytes
.
NewReader
(
f
.
readXML
(
name
)))
for
{
token
,
_
:=
decoder
.
Token
()
if
token
==
nil
{
break
}
switch
startElement
:=
token
.
(
type
)
{
case
xml
.
StartElement
:
inElement
=
startElement
.
Name
.
Local
if
inElement
==
"row"
{
r
=
xlsxRow
{}
_
=
decoder
.
DecodeElement
(
&
r
,
&
startElement
)
for
_
,
colCell
:=
range
r
.
C
{
val
,
_
:=
colCell
.
getValueFrom
(
f
,
d
)
if
val
!=
value
{
continue
}
result
=
append
(
result
,
fmt
.
Sprintf
(
"%s%d"
,
strings
.
Map
(
letterOnlyMapF
,
colCell
.
R
),
r
.
R
))
}
}
default
:
}
}
return
result
}
// trimSheetName provides a function to trim invaild characters by given worksheet
// name.
func
trimSheetName
(
name
string
)
string
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录