|
@@ -139,6 +139,9 @@ class LuckySheet extends React.Component {
|
|
|
this.luckysheet.setCellFormat(0, 0, 'bg', '#fff');
|
|
|
}, 100);
|
|
|
},
|
|
|
+ workbookCreateAfter: options => {
|
|
|
+ this.luckysheet.refreshFormula();
|
|
|
+ },
|
|
|
},
|
|
|
};
|
|
|
if (version) {
|
|
@@ -625,50 +628,28 @@ class LuckySheet extends React.Component {
|
|
|
return comment;
|
|
|
}
|
|
|
|
|
|
- async goalSeek(type, goal,setting) {
|
|
|
- let luckysheet = this.luckysheet;
|
|
|
+ async goalSeek(type, goal, setting) {
|
|
|
+ const luckysheet = this.luckysheet;
|
|
|
const sheet = this.luckysheet.getSheet({
|
|
|
- name: '毛利概算'
|
|
|
- })
|
|
|
- let order = sheet.order;
|
|
|
-
|
|
|
- const fn = function(x) {
|
|
|
- return new Promise(resolve => {
|
|
|
- luckysheet.setCellValue(9, 2, x.toFixed(4), {
|
|
|
- order,
|
|
|
- success: () => {
|
|
|
- luckysheet.refreshFormula(() => {
|
|
|
- let row;
|
|
|
- if (type == 1) {
|
|
|
- row = 1;
|
|
|
- } else if (type == 2) {
|
|
|
- row = 4;
|
|
|
- } else {
|
|
|
- row = 5;
|
|
|
- }
|
|
|
- let data = luckysheet.getCellValue(row, 2, {
|
|
|
- order,
|
|
|
- });
|
|
|
- console.log(data);
|
|
|
- resolve(data);
|
|
|
- });
|
|
|
- },
|
|
|
- });
|
|
|
- });
|
|
|
- };
|
|
|
+ name: '毛利概算',
|
|
|
+ });
|
|
|
+ const order = sheet.order;
|
|
|
+
|
|
|
try {
|
|
|
let defaultValue = luckysheet.getCellValue(9, 2, {
|
|
|
order,
|
|
|
});
|
|
|
const result = await GoalSeek({
|
|
|
goal,
|
|
|
- fn,
|
|
|
- fnParams: [defaultValue],
|
|
|
+ fn: fn,
|
|
|
+ fnParams: [defaultValue, sheet.data, type],
|
|
|
maxIterations: 1000,
|
|
|
independentVariableIdx: 0,
|
|
|
- ...setting
|
|
|
+ ...setting,
|
|
|
+ });
|
|
|
+ luckysheet.setCellValue(9, 2, result, {
|
|
|
+ order,
|
|
|
});
|
|
|
- console.log(result);
|
|
|
} catch (error) {
|
|
|
console.log(error);
|
|
|
}
|
|
@@ -686,5 +667,90 @@ class LuckySheet extends React.Component {
|
|
|
);
|
|
|
}
|
|
|
}
|
|
|
+function fn(C10, data, type) {
|
|
|
+ let C50 = data[49][2].v || 0;
|
|
|
+ let C49 = data[48][2].v || 0;
|
|
|
+ let C20 = data[19][2].v || 0;
|
|
|
+ let C21 = data[20][2].v || 0;
|
|
|
+ let C9 = data[8][2].v || 0;
|
|
|
+ let C15 = data[14][2].v || 0;
|
|
|
+ let C16 = data[15][2].v || 0;
|
|
|
+ let C17 = data[16][2].v || 0;
|
|
|
+ let C18 = data[17][2].v || 0;
|
|
|
+ let C19 = data[18][2].v || 0;
|
|
|
+ let C51 = data[50][2].v || 0;
|
|
|
+
|
|
|
+ let G42 = data[41][6].v || 0;
|
|
|
+ let G12 = data[11][6].v || 0;
|
|
|
+ let G13 = data[12][6].v || 0;
|
|
|
+ let G7 = data[6][6].v || 0;
|
|
|
+ let G8 = data[7][6].v || 0;
|
|
|
+ switch (type) {
|
|
|
+ case 1:
|
|
|
+ // 净利率
|
|
|
+ return C3() / C59();
|
|
|
+ case 2:
|
|
|
+ // 贡献毛利率
|
|
|
+ return C4() / C59();
|
|
|
+ case 3:
|
|
|
+ // 合同总价
|
|
|
+ return C59();
|
|
|
+ }
|
|
|
+
|
|
|
+ function C59() {
|
|
|
+ return C58() + C57() + C56() + C54();
|
|
|
+ }
|
|
|
|
|
|
+ function C4() {
|
|
|
+ return C3() + C50 + C49 + C48() + G42 + C43();
|
|
|
+ }
|
|
|
+ function C48() {
|
|
|
+ return C59() * G12;
|
|
|
+ }
|
|
|
+ function C58() {
|
|
|
+ return (C56() + C57()) * 0.12;
|
|
|
+ }
|
|
|
+ function C57() {
|
|
|
+ return (((C20 + C21) * C10) / (1 + G7)) * G7 - ((C20 + C21) / (1 + G8)) * G8;
|
|
|
+ }
|
|
|
+ function C56() {
|
|
|
+ return (
|
|
|
+ (((C15 + C16 + C17 + C18 + C19) * C10) / (1 + G7)) * G7 -
|
|
|
+ ((C15 + C16 + C17 + C18 + C19) / (1 + G7)) * G7
|
|
|
+ );
|
|
|
+ }
|
|
|
+ function C54() {
|
|
|
+ return SUM(2, [14, 20]) * C10;
|
|
|
+ }
|
|
|
+
|
|
|
+ function C3() {
|
|
|
+ return C55() - C53();
|
|
|
+ }
|
|
|
+ function C55() {
|
|
|
+ return C59() / (1 + G7);
|
|
|
+ }
|
|
|
+ function C53() {
|
|
|
+ return C52() - ((SUM(2, [14, 18]) / (1 + G7)) * G7 + (SUM(2, [19, 20]) / (1 + G8)) * G8);
|
|
|
+ }
|
|
|
+ function C52() {
|
|
|
+ return SUM(2, [14, 50]);
|
|
|
+ }
|
|
|
+ function C43() {
|
|
|
+ return C59() * G13;
|
|
|
+ }
|
|
|
+ function C44() {
|
|
|
+ return C59() * C9;
|
|
|
+ }
|
|
|
+
|
|
|
+ function SUM(x, [y1, y2]) {
|
|
|
+ let total = 0;
|
|
|
+ for (let i = y1; i < y2; i++) {
|
|
|
+ const item = data[i][x];
|
|
|
+ if (!isNaN(item.v)) {
|
|
|
+ total += item.v;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return total;
|
|
|
+ }
|
|
|
+}
|
|
|
export default LuckySheet;
|