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
3d347ff6
Commit
3d347ff6
authored
Jul 20, 2017
by
GoshaZotov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
+ previous
parent
dfec624e
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
61 additions
and
50 deletions
+61
-50
cell/model/FormulaObjects/databaseFunctions.js
cell/model/FormulaObjects/databaseFunctions.js
+61
-50
No files found.
cell/model/FormulaObjects/databaseFunctions.js
View file @
3d347ff6
...
...
@@ -42,57 +42,72 @@
var
cElementType
=
AscCommonExcel
.
cElementType
;
var
cNumber
=
AscCommonExcel
.
cNumber
;
function
getNeedValuesFromDataBase
(
dataBase
,
field
,
conditionData
){
function
checkValueByCondition
(
condition
,
val
){
var
res
=
false
;
var
condition
=
condition
.
getValue
();
//заполняем map название столбца-> его содержимое(из базы данных)
var
headersArr
=
[];
var
headersDataMap
=
{};
var
dataBaseRowsCount
=
dataBase
.
length
;
var
dataBaseColsCount
=
dataBase
[
0
].
length
;
for
(
var
i
=
0
;
i
<
dataBaseRowsCount
;
i
++
){
for
(
var
j
=
0
;
j
<
dataBaseColsCount
;
j
++
){
if
(
""
===
condition
){
res
=
true
;
}
else
{
res
=
AscCommonExcel
.
matching
(
val
,
AscCommonExcel
.
matchingValue
(
condition
));
}
return
res
;
}
function
convertDatabase
(
dataBase
,
bIsCondition
)
{
var
arr
=
[];
var
map
=
{};
for
(
var
i
=
0
;
i
<
dataBase
.
length
;
i
++
){
for
(
var
j
=
0
;
j
<
dataBase
[
0
].
length
;
j
++
){
var
header
=
dataBase
[
0
][
j
].
getValue
();
if
(
0
===
i
){
if
(
headersDataMap
.
hasOwnProperty
(
header
)){
//если находим такой же заголовок, пропускаем
continue
;
if
(
bIsCondition
){
if
(
0
===
i
){
arr
[
j
]
=
header
;
if
(
map
.
hasOwnProperty
(
header
)){
//если находим такой же заголовок, пропускаем
continue
;
}
else
{
map
[
header
]
=
[];
}
}
else
{
headersDataMap
[
header
]
=
[];
headersArr
[
j
]
=
header
;
map
[
header
].
push
(
dataBase
[
i
][
j
]);
}
}
else
{
if
(
!
headersDataMap
[
header
][
i
-
1
]){
headersDataMap
[
header
][
i
-
1
]
=
dataBase
[
i
][
j
];
if
(
0
===
i
){
if
(
map
.
hasOwnProperty
(
header
)){
//если находим такой же заголовок, пропускаем
continue
;
}
else
{
map
[
header
]
=
[];
arr
[
j
]
=
header
;
}
}
else
{
if
(
!
map
[
header
][
i
-
1
]){
map
[
header
][
i
-
1
]
=
dataBase
[
i
][
j
];
}
}
}
}
}
return
{
arr
:
arr
,
map
:
map
};
}
function
getNeedValuesFromDataBase
(
dataBase
,
field
,
conditionData
){
//заполняем map название столбца-> его содержимое(из базы данных)
var
databaseObj
=
convertDatabase
(
dataBase
);
var
headersArr
=
databaseObj
.
arr
,
headersDataMap
=
databaseObj
.
map
;
//заполняем map название столбца-> его содержимое(из условий)
var
headersConditionArr
=
[];
var
headersConditionMap
=
{};
var
conditionBaseRowsCount
=
conditionData
.
length
;
var
conditionBaseColsCount
=
conditionData
[
0
].
length
;
for
(
var
i
=
0
;
i
<
conditionBaseRowsCount
;
i
++
){
for
(
var
j
=
0
;
j
<
conditionBaseColsCount
;
j
++
){
var
header
=
conditionData
[
0
][
j
].
getValue
();
if
(
0
===
i
){
headersConditionArr
[
j
]
=
header
;
if
(
headersConditionMap
.
hasOwnProperty
(
header
)){
//если находим такой же заголовок, пропускаем
continue
;
}
else
{
headersConditionMap
[
header
]
=
[];
}
}
else
{
headersConditionMap
[
header
].
push
(
conditionData
[
i
][
j
]);
}
}
}
var
databaseObj
=
convertDatabase
(
conditionData
,
true
);
var
headersConditionArr
=
databaseObj
.
arr
,
headersConditionMap
=
databaseObj
.
map
;
//
если поле задано числом, то выбираем заголовок столбца с данным именем
//
преобразуем аргумент поле
var
isNumberField
=
field
.
tocNumber
();
if
(
cElementType
.
error
===
isNumberField
.
type
){
field
=
field
.
getValue
();
}
else
{
//если поле задано числом, то выбираем заголовок столбца с данным именем
var
number
=
isNumberField
.
getValue
();
if
(
headersArr
[
number
-
1
]){
field
=
headersArr
[
number
-
1
];
...
...
@@ -101,36 +116,32 @@
}
}
var
isTrueCondition
=
function
(
condition
,
val
){
var
res
=
false
;
var
condition
=
condition
.
getValue
();
if
(
""
===
condition
){
res
=
true
;
}
else
{
res
=
window
[
'
AscCommonExcel
'
].
matching
(
val
,
AscCommonExcel
.
matchingValue
(
condition
));
}
return
res
;
};
if
(
null
===
field
){
return
false
;
}
var
previousWinArray
;
var
winElems
=
[];
for
(
var
i
=
1
;
i
<
condition
BaseRowsCount
;
i
++
){
for
(
var
i
=
1
;
i
<
condition
Data
.
length
;
i
++
){
previousWinArray
=
null
;
for
(
var
j
=
0
;
j
<
condition
BaseColsCount
;
j
++
){
for
(
var
j
=
0
;
j
<
condition
Data
[
0
].
length
;
j
++
){
var
condition
=
conditionData
[
i
][
j
];
var
header
=
headersConditionArr
[
j
];
//проходимся по всем строкам данного столбца из базы и смотрим что нам подходит по условию
var
databaseData
=
headersDataMap
[
header
];
if
(
!
databaseData
){
continue
;
}
var
winColumnArray
=
[];
for
(
var
n
=
0
;
n
<
databaseData
.
length
;
n
++
){
if
(
previousWinArray
&&
previousWinArray
[
n
]){
if
(
isTrue
Condition
(
condition
,
databaseData
[
n
])){
if
(
checkValueBy
Condition
(
condition
,
databaseData
[
n
])){
winColumnArray
[
n
]
=
true
;
}
}
else
if
(
!
previousWinArray
&&
isTrue
Condition
(
condition
,
databaseData
[
n
])){
}
else
if
(
!
previousWinArray
&&
checkValueBy
Condition
(
condition
,
databaseData
[
n
])){
winColumnArray
[
n
]
=
true
;
}
}
...
...
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