Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
sdkjs
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boris Kocherov
sdkjs
Commits
be4d574e
Commit
be4d574e
authored
Oct 07, 2016
by
Alexander.Trofimov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix find and replace
parent
a409cd22
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
98 additions
and
125 deletions
+98
-125
cell/utils/utils.js
cell/utils/utils.js
+2
-2
cell/view/WorkbookView.js
cell/view/WorkbookView.js
+2
-2
cell/view/WorksheetView.js
cell/view/WorksheetView.js
+94
-121
No files found.
cell/utils/utils.js
View file @
be4d574e
...
...
@@ -1753,7 +1753,7 @@
this
.
isReplaceAll
=
false
;
// заменить все (если у нас замена)
// внутренние переменные
this
.
active
Range
=
null
;
this
.
active
Cell
=
null
;
this
.
indexInArray
=
0
;
this
.
countFind
=
0
;
this
.
countReplace
=
0
;
...
...
@@ -1774,7 +1774,7 @@
result
.
replaceWith
=
this
.
replaceWith
;
result
.
isReplaceAll
=
this
.
isReplaceAll
;
result
.
active
Range
=
this
.
activeRange
?
this
.
activeRange
.
clone
()
:
null
;
result
.
active
Cell
=
this
.
activeCell
?
this
.
activeCell
.
clone
()
:
null
;
result
.
indexInArray
=
this
.
indexInArray
;
result
.
countFind
=
this
.
countFind
;
result
.
countReplace
=
this
.
countReplace
;
...
...
cell/view/WorkbookView.js
View file @
be4d574e
...
...
@@ -2136,7 +2136,7 @@
// Поиск текста в листе
WorkbookView
.
prototype
.
findCellText
=
function
(
options
)
{
// Для поиска эта переменная не нужна (но она может остаться от replace)
options
.
active
Range
=
null
;
options
.
active
Cell
=
null
;
var
ws
=
this
.
getWorksheet
();
// Останавливаем ввод данных в редакторе ввода
...
...
@@ -2198,7 +2198,7 @@
}
if
(
result
)
{
return
ws
.
_setActiveCell
(
result
.
c1
,
result
.
r1
);
return
ws
.
setSelection
(
result
);
}
this
.
_cleanFindResults
();
return
null
;
...
...
cell/view/WorksheetView.js
View file @
be4d574e
...
...
@@ -10453,53 +10453,29 @@
// ----- Search -----
WorksheetView
.
prototype
.
_setActiveCell
=
function
(
col
,
row
)
{
var
ar
=
this
.
activeRange
,
sc
=
ar
.
startCol
,
sr
=
ar
.
startRow
,
offs
;
this
.
cleanSelection
();
ar
.
assign
(
col
,
row
,
col
,
row
);
ar
.
type
=
c_oAscSelectionType
.
RangeCells
;
ar
.
startCol
=
col
;
ar
.
startRow
=
row
;
this
.
_fixSelectionOfMergedCells
();
this
.
_fixSelectionOfHiddenCells
();
this
.
_drawSelection
();
var
x1
=
this
.
getCellLeftRelative
(
this
.
activeRange
.
c1
,
/*pt*/
0
),
y1
=
this
.
getCellTopRelative
(
this
.
activeRange
.
r1
,
/*pt*/
0
);
offs
=
this
.
_calcActiveRangeOffset
(
x1
,
y1
);
if
(
sc
!==
ar
.
startCol
||
sr
!==
ar
.
startRow
)
{
this
.
handlers
.
trigger
(
"
selectionNameChanged
"
,
this
.
getSelectionName
(
/*bRangeText*/
false
)
);
this
.
handlers
.
trigger
(
"
selectionChanged
"
,
this
.
getSelectionInfo
()
);
}
return
offs
;
};
WorksheetView
.
prototype
.
_isCellEqual
=
function
(
c
,
r
,
options
)
{
WorksheetView
.
prototype
.
_isCellEqual
=
function
(
c
,
r
,
options
)
{
var
cell
,
cellText
;
// Не пользуемся RegExp, чтобы не возиться со спец.символами
var
mc
=
this
.
model
.
getMergedByCell
(
r
,
c
);
cell
=
mc
?
this
.
_getVisibleCell
(
mc
.
c1
,
mc
.
r1
)
:
this
.
_getVisibleCell
(
c
,
r
);
var
mc
=
this
.
model
.
getMergedByCell
(
r
,
c
);
cell
=
mc
?
this
.
_getVisibleCell
(
mc
.
c1
,
mc
.
r1
)
:
this
.
_getVisibleCell
(
c
,
r
);
cellText
=
(
options
.
lookIn
===
Asc
.
c_oAscFindLookIn
.
Formulas
)
?
cell
.
getValueForEdit
()
:
cell
.
getValue
();
if
(
true
!==
options
.
isMatchCase
)
{
if
(
true
!==
options
.
isMatchCase
)
{
cellText
=
cellText
.
toLowerCase
();
}
if
(
(
cellText
.
indexOf
(
options
.
findWhat
)
>=
0
)
&&
(
true
!==
options
.
isWholeCell
||
options
.
findWhat
.
length
===
cellText
.
length
)
)
{
return
(
mc
?
new
asc_Range
(
mc
.
c1
,
mc
.
r1
,
mc
.
c1
,
mc
.
r1
)
:
new
asc_Range
(
c
,
r
,
c
,
r
));
if
((
cellText
.
indexOf
(
options
.
findWhat
)
>=
0
)
&&
(
true
!==
options
.
isWholeCell
||
options
.
findWhat
.
length
===
cellText
.
length
))
{
return
(
mc
?
new
asc_Range
(
mc
.
c1
,
mc
.
r1
,
mc
.
c1
,
mc
.
r1
)
:
new
asc_Range
(
c
,
r
,
c
,
r
));
}
return
null
;
};
WorksheetView
.
prototype
.
findCellText
=
function
(
options
)
{
WorksheetView
.
prototype
.
findCellText
=
function
(
options
)
{
var
self
=
this
;
if
(
true
!==
options
.
isMatchCase
)
{
if
(
true
!==
options
.
isMatchCase
)
{
options
.
findWhat
=
options
.
findWhat
.
toLowerCase
();
}
var
ar
=
options
.
active
Range
?
options
.
activeRange
:
this
.
activeRange
;
var
c
=
ar
.
startC
ol
;
var
r
=
ar
.
startR
ow
;
var
ar
=
options
.
active
Cell
?
options
.
activeCell
:
this
.
model
.
selectionRange
.
activeCell
;
var
c
=
ar
.
c
ol
;
var
r
=
ar
.
r
ow
;
var
minC
=
0
;
var
minR
=
0
;
var
maxC
=
this
.
cols
.
length
-
1
;
...
...
@@ -10508,86 +10484,82 @@
var
isEqual
;
// ToDo стоит переделать это место, т.к. для поиска не нужны измерения, а нужен только сам текст (http://bugzilla.onlyoffice.com/show_bug.cgi?id=26136)
this
.
_prepareCellTextMetricsCache
(
new
Asc
.
Range
(
0
,
0
,
this
.
model
.
getColsCount
(),
this
.
model
.
getRowsCount
()
)
);
this
.
_prepareCellTextMetricsCache
(
new
Asc
.
Range
(
0
,
0
,
this
.
model
.
getColsCount
(),
this
.
model
.
getRowsCount
())
);
function
findNextCell
()
{
var
ct
=
undefined
;
do
{
if
(
options
.
scanByRows
)
{
if
(
options
.
scanByRows
)
{
c
+=
inc
;
if
(
c
<
minC
||
c
>
maxC
)
{
if
(
c
<
minC
||
c
>
maxC
)
{
c
=
options
.
scanForward
?
minC
:
maxC
;
r
+=
inc
;
}
}
else
{
}
else
{
r
+=
inc
;
if
(
r
<
minR
||
r
>
maxR
)
{
if
(
r
<
minR
||
r
>
maxR
)
{
r
=
options
.
scanForward
?
minR
:
maxR
;
c
+=
inc
;
}
}
if
(
c
<
minC
||
c
>
maxC
||
r
<
minR
||
r
>
maxR
)
{
if
(
c
<
minC
||
c
>
maxC
||
r
<
minR
||
r
>
maxR
)
{
return
undefined
;
}
ct
=
self
.
_getCellTextCache
(
c
,
r
,
true
);
}
while
(
!
ct
);
ct
=
self
.
_getCellTextCache
(
c
,
r
,
true
);
}
while
(
!
ct
);
return
ct
;
}
while
(
findNextCell
()
)
{
isEqual
=
this
.
_isCellEqual
(
c
,
r
,
options
);
if
(
null
!==
isEqual
)
{
while
(
findNextCell
()
)
{
isEqual
=
this
.
_isCellEqual
(
c
,
r
,
options
);
if
(
null
!==
isEqual
)
{
return
isEqual
;
}
}
// Продолжаем циклический поиск
if
(
options
.
scanForward
)
{
if
(
options
.
scanForward
)
{
// Идем вперед с первой ячейки
minC
=
0
;
minR
=
0
;
if
(
options
.
scanByRows
)
{
if
(
options
.
scanByRows
)
{
c
=
-
1
;
r
=
0
;
maxC
=
this
.
cols
.
length
-
1
;
maxR
=
ar
.
startRow
;
}
else
{
maxR
=
ar
.
row
;
}
else
{
c
=
0
;
r
=
-
1
;
maxC
=
ar
.
startC
ol
;
maxC
=
ar
.
c
ol
;
maxR
=
this
.
rows
.
length
-
1
;
}
}
else
{
}
else
{
// Идем назад с последней
c
=
this
.
cols
.
length
-
1
;
r
=
this
.
rows
.
length
-
1
;
if
(
options
.
scanByRows
)
{
if
(
options
.
scanByRows
)
{
minC
=
0
;
minR
=
ar
.
startRow
;
}
else
{
minC
=
ar
.
startCol
;
minR
=
ar
.
row
;
}
else
{
minC
=
ar
.
col
;
minR
=
0
;
}
maxC
=
this
.
cols
.
length
-
1
;
maxR
=
this
.
rows
.
length
-
1
;
}
while
(
findNextCell
()
)
{
isEqual
=
this
.
_isCellEqual
(
c
,
r
,
options
);
if
(
null
!==
isEqual
)
{
while
(
findNextCell
()
)
{
isEqual
=
this
.
_isCellEqual
(
c
,
r
,
options
);
if
(
null
!==
isEqual
)
{
return
isEqual
;
}
}
return
null
;
};
WorksheetView
.
prototype
.
replaceCellText
=
function
(
options
,
lockDraw
,
callback
)
{
if
(
true
!==
options
.
isMatchCase
)
{
WorksheetView
.
prototype
.
replaceCellText
=
function
(
options
,
lockDraw
,
callback
)
{
if
(
true
!==
options
.
isMatchCase
)
{
options
.
findWhat
=
options
.
findWhat
.
toLowerCase
();
}
...
...
@@ -10596,42 +10568,41 @@
options
.
countReplace
=
0
;
var
t
=
this
;
var
a
r
=
this
.
activeRange
.
clone
();
var
a
ctiveCell
=
this
.
model
.
selectionRange
.
activeCell
.
clone
();
var
aReplaceCells
=
[];
if
(
options
.
isReplaceAll
)
{
if
(
options
.
isReplaceAll
)
{
var
aReplaceCellsIndex
=
{};
options
.
active
Range
=
ar
;
options
.
active
Cell
=
activeCell
;
var
findResult
,
index
;
while
(
true
)
{
findResult
=
t
.
findCellText
(
options
);
if
(
null
===
findResult
)
{
while
(
true
)
{
findResult
=
t
.
findCellText
(
options
);
if
(
null
===
findResult
)
{
break
;
}
index
=
findResult
.
c1
+
'
-
'
+
findResult
.
r1
;
if
(
aReplaceCellsIndex
[
index
]
)
{
if
(
aReplaceCellsIndex
[
index
]
)
{
break
;
}
aReplaceCellsIndex
[
index
]
=
true
;
aReplaceCells
.
push
(
findResult
);
ar
.
startCol
=
findResult
.
c1
;
ar
.
startRow
=
findResult
.
r1
;
}
aReplaceCells
.
push
(
findResult
);
activeCell
.
col
=
findResult
.
c1
;
activeCell
.
row
=
findResult
.
r1
;
}
else
{
}
else
{
// Попробуем сначала найти
var
isEqual
=
this
.
_isCellEqual
(
ar
.
startCol
,
ar
.
startRow
,
options
);
if
(
null
===
isEqual
)
{
return
callback
(
options
);
var
isEqual
=
this
.
_isCellEqual
(
activeCell
.
col
,
activeCell
.
row
,
options
);
if
(
null
===
isEqual
)
{
return
callback
(
options
);
}
aReplaceCells
.
push
(
isEqual
);
aReplaceCells
.
push
(
isEqual
);
}
if
(
0
>
aReplaceCells
.
length
)
{
return
callback
(
options
);
if
(
0
>
aReplaceCells
.
length
)
{
return
callback
(
options
);
}
return
this
.
_replaceCellsText
(
aReplaceCells
,
options
,
lockDraw
,
callback
);
return
this
.
_replaceCellsText
(
aReplaceCells
,
options
,
lockDraw
,
callback
);
};
WorksheetView
.
prototype
.
_replaceCellsText
=
function
(
aReplaceCells
,
options
,
lockDraw
,
callback
)
{
...
...
@@ -10668,46 +10639,48 @@
}
};
WorksheetView
.
prototype
.
_replaceCellText
=
function
(
aReplaceCells
,
valueForSearching
,
options
,
lockDraw
,
callback
,
oneUser
)
{
WorksheetView
.
prototype
.
_replaceCellText
=
function
(
aReplaceCells
,
valueForSearching
,
options
,
lockDraw
,
callback
,
oneUser
)
{
var
t
=
this
;
if
(
options
.
indexInArray
>=
aReplaceCells
.
length
)
{
this
.
draw
(
lockDraw
);
return
callback
(
options
);
if
(
options
.
indexInArray
>=
aReplaceCells
.
length
)
{
this
.
draw
(
lockDraw
);
return
callback
(
options
);
}
var
onReplaceCallback
=
function
(
isSuccess
)
{
var
onReplaceCallback
=
function
(
isSuccess
)
{
var
cell
=
aReplaceCells
[
options
.
indexInArray
];
++
options
.
indexInArray
;
if
(
false
!==
isSuccess
)
{
if
(
false
!==
isSuccess
)
{
++
options
.
countReplace
;
var
c
=
t
.
_getVisibleCell
(
cell
.
c1
,
cell
.
r1
);
var
c
=
t
.
_getVisibleCell
(
cell
.
c1
,
cell
.
r1
);
if
(
c
===
undefined
)
{
asc_debug
(
"
log
"
,
"
Unknown cell's info: col =
"
+
cell
.
c1
+
"
, row =
"
+
cell
.
r1
);
}
else
{
if
(
c
===
undefined
)
{
asc_debug
(
"
log
"
,
"
Unknown cell's info: col =
"
+
cell
.
c1
+
"
, row =
"
+
cell
.
r1
);
}
else
{
var
cellValue
=
c
.
getValueForEdit
();
cellValue
=
cellValue
.
replace
(
valueForSearching
,
options
.
replaceWith
);
cellValue
=
cellValue
.
replace
(
valueForSearching
,
options
.
replaceWith
);
var
oCellEdit
=
new
asc_Range
(
cell
.
c1
,
cell
.
r1
,
cell
.
c1
,
cell
.
r1
);
var
oCellEdit
=
new
asc_Range
(
cell
.
c1
,
cell
.
r1
,
cell
.
c1
,
cell
.
r1
);
var
v
,
newValue
;
// get first fragment and change its text
v
=
c
.
getValueForEdit2
().
slice
(
0
,
1
);
v
=
c
.
getValueForEdit2
().
slice
(
0
,
1
);
// Создаем новый массив, т.к. getValueForEdit2 возвращает ссылку
newValue
=
[];
newValue
[
0
]
=
new
AscCommonExcel
.
Fragment
(
{
text
:
cellValue
,
format
:
v
[
0
].
format
.
clone
()}
);
newValue
[
0
]
=
new
AscCommonExcel
.
Fragment
({
text
:
cellValue
,
format
:
v
[
0
].
format
.
clone
()}
);
t
.
_saveCellValueAfterEdit
(
oCellEdit
,
c
,
newValue
,
/*flags*/
undefined
,
/*skipNLCheck*/
false
,
/*isNotHistory*/
true
,
/*lockDraw*/
true
);
t
.
_saveCellValueAfterEdit
(
oCellEdit
,
c
,
newValue
,
/*flags*/
undefined
,
/*skipNLCheck*/
false
,
/*isNotHistory*/
true
,
/*lockDraw*/
true
);
}
}
window
.
setTimeout
(
function
()
{
t
.
_replaceCellText
(
aReplaceCells
,
valueForSearching
,
options
,
lockDraw
,
callback
,
oneUser
);
},
1
);
window
.
setTimeout
(
function
()
{
t
.
_replaceCellText
(
aReplaceCells
,
valueForSearching
,
options
,
lockDraw
,
callback
,
oneUser
);
},
1
);
};
return
oneUser
?
onReplaceCallback
(
true
)
:
this
.
_isLockedCells
(
aReplaceCells
[
options
.
indexInArray
],
/*subType*/
null
,
onReplaceCallback
);
return
oneUser
?
onReplaceCallback
(
true
)
:
this
.
_isLockedCells
(
aReplaceCells
[
options
.
indexInArray
],
/*subType*/
null
,
onReplaceCallback
);
};
WorksheetView
.
prototype
.
findCell
=
function
(
reference
,
isViewerMode
)
{
...
...
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