рдЖрдк рдЧреНрд░рд╛рд╣рдХреЛрдВ рд╕реЗ рдХрд┐рддрдиреА рдмрд╛рд░ рд╕реБрдирддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ Excel рдореЗрдВ рдбреЗрдЯрд╛ рднреЗрдЬреЗрдВрдЧреЗ рдпрд╛ рдЖрдкрдХреЛ Excel- рд╕рдВрдЧрдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдпрд╛ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВрдЧреЗ? рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдПрдХреНрд╕реЗрд▓ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп, рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рд░рд▓ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдХрд░рдг рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдмрд┐рдВрджреБ рд╣рдореЗрд╢рд╛ рд╡рд┐рднрд┐рдиреНрди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдРрд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХреАрдХрд░рдг рд╣реЛрддрд╛ рд╣реИред рд╣рдорд╛рд░реА рдЯреАрдо рдХреЛ рдХрд╕реНрдЯрдо рдПрдХреНрд╕реЗрд▓ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╕реЗрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛ред
рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХреНрд╕реЗрд▓ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдкрд╛рджрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЪреБрдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдпрджрд┐ рдЖрдк рдЬрдЯрд┐рд▓ рд╡рд┐рддреНрддреАрдп (рдФрд░ рди рдХреЗрд╡рд▓) рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдХрд░рдг рдХреЗ рд╕рд╛рде рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХреЗ рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдФрд░ рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдХрд░рдг рдХреЗ рд╕рд╛рде, рдмрд┐рд▓реНрд▓реА рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИредрдХрдВрдкрдиреА рдореЗрдВ рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╣реБрдП, рд╣рдордиреЗ рдПрдХ рдмрд╣реБрдд рд╣реА рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ рдкрд╛рдпрд╛: тАЬрд╡рд┐рдХрд╕рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрджрд▓рддреЗ рд╕рдордп рдЙрддреНрдкрд╛рдж рдХреА рд▓рд╛рдЧрдд (рдЕрд░реНрдерд╛рддреН, рдмрд╛рд▓рдХрдиреА) рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рддреБрд░рдВрдд рдирдИ рд▓рд╛рдЧрдд рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред рд╕рднреА рдЧрдгрдирд╛ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдШрдЯрдХ рдореВрд▓реНрдп рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХреНрд╕реЗрд▓ рдлрд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред " рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЖрдХрд╛рд░, рдЖрдХрд╛рд░, рдЧреНрд▓реЗрдЬрд╝рд┐рдВрдЧ рдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рд╛рдордЧреНрд░реА, рдкреНрд░рдХрд╛рд░ рдХреЗ рдлрд╛рд╕реНрдЯрдирд┐рдВрдЧреНрд╕, рд╕рд╛рде рд╣реА рдХрдИ рдЕрдиреНрдп рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрд╛рд▓рдХрдирд┐рдпреЛрдВ рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЛрд░реНрдЯрд▓ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА рдЬреЛ рдЙрддреНрдкрд╛рджрди рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рд╕рдВрдХреЗрддрдХреЛрдВ рдХреА рд╕рдЯреАрдХ рд▓рд╛рдЧрдд рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрд╣рдо рдЗрдирдкреБрдЯ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рджреЗрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдХрд┐рд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдерд╛:- рдмрд╛рд▓рдХрдиреА рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдмрджрд▓рддреЗ рд╕рдордп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдХреАрдорддреЛрдВ рдХреА рддреНрд╡рд░рд┐рдд рдЧрдгрдирд╛;
- рдПрдХ рдЕрд▓рдЧ рдЧрдгрдирд╛ рдлрд╝рд╛рдЗрд▓ рджреНрд╡рд╛рд░рд╛ рдЖрдкреВрд░реНрддрд┐ рдХреА рдЧрдИ рдмрд╛рд▓рдХрдирд┐рдпреЛрдВ рдФрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдСрдлрд╝рд░ рдХреЗ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рд╣рд┐рдд рдбрд┐рдЬрд╛рдЗрди рдбреЗрдЯрд╛ рдХреА рддреНрд╡рд░рд┐рдд рдЧрдгрдирд╛;
- рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдореЗрдВ - рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕рд╛рдзрди-рдЦрдкрдд рд╕рдВрдЪрд╛рд▓рди (рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рдХрд╛рд░реНрдп, рдЖрджрд┐) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рдХрд╛рд╕ред
- рдпрд╣ рд╕рдм рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рдкрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рд╕реВрддреНрд░ рдЧреНрд░рд╛рд╣рдХ рдХреА рдмреМрджреНрдзрд┐рдХ рд╕рдВрдкрджрд╛ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЛ рдирд╣реАрдВ рджреЗрдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП;
- рдкреАрдХ-рд▓реЛрдбреЗрдб рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЙрддреНрдкрд╛рдж рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдХреНрд╕рд░ рдФрд░ рдЬрд▓реНрджреА рд╕реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдмрд╣реБрдд рд╣реА рдЕрд╕рд╛рдорд╛рдиреНрдп рдФрд░ рд╕реБрдкрд░ рд▓реБрднрд╛рд╡рдирд╛ рд▓рдЧрддрд╛ рд╣реИ, рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ!рдЯрд░реНрдирдХреА рд╕рдорд╛рдзрд╛рди рдФрд░ рдбреЗрдЯрд╛ рддреИрдпрд╛рд░реА
рдЬрдЯрд┐рд▓ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рд╢реЛрдз StackOverflow, GitHub рдФрд░ рдХрдИ рдордВрдЪреЛрдВ рдкрд░ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИредрдХрдИ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдПрдХреНрд╕реЗрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рдереЗ, рд╕рд╛рде рд╣реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЕрдВрджрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реВрддреНрд░реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред рдЗрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдмреАрдЪ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐: рд╢реБрд▓реНрдХ рд╕рдорд╛рдзрд╛рди рдФрд░ рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рд╡рд┐рдХрд╛рд╕ рджреЛрдиреЛрдВ рд╣реИрдВред рдЕрдЧрд▓рд╛ рдХрджрдо рд▓реЛрдб рдЯреЗрд╕реНрдЯ рд▓рд┐рдЦрдирд╛ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд░рдирдЯрд╛рдЗрдо рдХреЛ рдорд╛рдкрдирд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░реЗрдВред рд╣рдо рдПрдХ рдирдИ рдПрдХреНрд╕реЗрд▓ рдлрд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП 10 рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ ( рдЗрд╕ рдкрд▓ рдХреЛ рдпрд╛рдж рд░рдЦреЗрдВ ) рдлреЙрд░реНрдореВрд▓рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╕рднреА рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рд╕реВрддреНрд░ рдореЗрдВ, рд╣рдо рд╡рд┐рднрд┐рдиреНрди рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдЧрдгрд┐рддреАрдп рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЯреНрд░рд┐рдХреА рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВредрдЪреВрдВрдХрд┐ рдпрд╣ рдкреИрд╕реЗ (рдЙрддреНрдкрд╛рдж рдХреА рд▓рд╛рдЧрдд) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд╣реИ, рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рд╕рдЯреАрдХрддрд╛ рдХреЛ рджреЗрдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдкрд░рд┐рдгрд╛рдореА рдорд╛рди рд▓реЗрдВрдЧреЗ рдЬреЛ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХреНрд╕реЗрд▓ рдЗрдВрдЯрд░реЛрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЧрдП рдереЗрдЪреВрдВрдХрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреА рдЧрдгрдирд╛ рдПрдХреНрд╕реЗрд▓ рдХреЛрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдпрд╣ рдЙрди рдорд╛рдиреЛрдВ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ рдЬреЛ рдЧреНрд░рд╛рд╣рдХ рдлреЙрд░реНрдореВрд▓реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд╛рдЧрдд рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рд╕рдВрджрд░реНрдн рд░рдирдЯрд╛рдЗрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдореВрд▓ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрд╡рдпрдВ рд╢реБрджреНрдз C # рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдПрдХреНрд╕реЗрд▓ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдлреЙрд░реНрдореВрд▓реЗ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗредрдЕрдиреБрд╡рд╛рджрд┐рдд рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрд░реАрдХреНрд╖рдг рдлреЙрд░реНрдореВрд▓рд╛:public double Execute(double[] p)
{
return Math.Pow(p[0] * p[8] / p[4] * Math.Sin(p[5]) * Math.Cos(p[2]) +
Math.Abs(p[1] - (p[2] + p[3] + p[4] + p[5] + p[6] + p[7] + p[8]))
* Math.Sqrt(p[0] * p[0] + p[1] * p[1]) / 2.0 * Math.PI, p[9]);
}
рд╣рдо рдПрди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреА рдПрдХ рдзрд╛рд░рд╛ рдмрдирд╛рддреЗ рд╣реИрдВ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо 10,000 рд╡реИрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ)редрд╣рдо рдкреВрд░реЗ рд╕реНрдЯреНрд░реАрдо рдкрд░ рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдЧрдгрдирд╛ рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдХреЗ рд╕рдордп рдХреЛ рдорд╛рдкрддреЗ рд╣реИрдВредрдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рд╕рдЯреАрдХрддрд╛ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рджреЛ рд╕рдВрдХреЗрддрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ - рдорд╛рдирдХ рд╡рд┐рдЪрд▓рди рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдЯреАрдХрддрд╛ рдЪрд░рдг рдПрдкреНрд╕рд┐рд▓реЙрди рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рди рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рд╢рддред рдпрджрд┐ рдЖрдк рджрд╢рдорд▓рд╡ рдмрд┐рдВрджреБ рдХреЗ рдмрд╛рдж рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдмрд┐рдВрджреБ рдХреЗ рд╕рд╛рде рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдЗрдирдкреБрдЯ рдорд╛рдиреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕рдЯреАрдХрддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП - рдпрд╣ рдЖрдкрдХреЛ рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдЕрдиреНрдпрдерд╛, рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд░рд┐рдорд╛рдг рдХреЗ рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдЕрдВрддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдпрд╣ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рд╕рдЯреАрдХрддрд╛ рдХреЛ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреА рддреНрд░реБрдЯрд┐ рдХреЗ рдЕрдиреБрдорд╛рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИредрдЪреВрдВрдХрд┐ рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕рд╛рдордЧреНрд░реА рдХреА рд▓рд╛рдЧрдд рдХреЗ рдирд┐рд░рдВрддрд░ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЬреНрдЮрд╛рди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдХреНрд╖реЗрддреНрд░реЛрдВ рд╕реЗ рдХреБрдЫ рд╕реНрдерд┐рд░рд╛рдВрдХ, рд╣рдо рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рднреА рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ 3 рджрд╢рдорд▓рд╡ рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдЯреАрдХ рдорд╛рди рд╣реЛрдВрдЧреЗред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рдорд╛рдиреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдорд╛рди рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╕реВрддреНрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЧрдгрд┐рддреАрдп рдФрд░ рднреМрддрд┐рдХ рдФрдЪрд┐рддреНрдп рдХреЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдлрд┐рд░ рд╕рдордп рдХреА рдЙрдЪрд┐рдд рдЕрд╡рдзрд┐ рдореЗрдВ рд╕рднреА 10 рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЧрдгрдирд╛ рдореЗрдВ рдХрднреА-рдХрднреА рдЧрдгрдирд╛ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рд╣рдо рд╕рдЯреАрдХрддрд╛ рд╕рдВрдХреЗрддрдХ рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдХреЗ рд╕рдордп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдРрд╕реЗ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рд╡реИрдХреНрдЯрд░ рдХреЛ рдмрд╛рд╣рд░ рдХрд░ рджреЗрддреЗ рд╣реИрдВ,рд▓реЗрдХрд┐рди рд╣рдо рдРрд╕реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЧрд┐рдиреЗрдВрдЧреЗредрдЯреЗрд╕реНрдЯ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░
рдкреНрд░рддреНрдпреЗрдХ рдЕрд▓рдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рд╣реА рд╡рд░реНрдЧ рд╣реИ рдХрд┐ рд▓рд╛рдЧреВ рдПрдХ рдЕрдВрддрд░рдлрд▓рдХ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ ITestExecutor
- рдХрд┐ 3 рддрд░реАрдХреЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ SetUp
, Execute
рдФрд░ TearDown
редpublic interface ITestExecutor
{
//
void SetUp();
// ,
double Execute(double[] p);
// ,
void TearDown();
}
рддрд░реАрдХреЗ SetUp
рдФрд░ TearDown
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рдкреВрд░реЗ рд╕реЗрдЯ рдкрд░ рд╕рдордп рдЧрдгрдирд╛ рдХреЛ рдорд╛рдкрдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрдирддреАрдЬрддрди, рдкрд░реАрдХреНрд╖рдг рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд▓рд┐рдП рдЙрдмрд▓рд╛ рд╣реБрдЖ:- рдбреЗрдЯрд╛ рддреИрдпрд╛рд░реА (рд╣рдо рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╕рдЯреАрдХрддрд╛ рдХреЗ рдЗрдирдкреБрдЯ рд╡реИрдХреНрдЯрд░ рдХреА рдПрдХ рдзрд╛рд░рд╛ рдмрдирд╛рддреЗ рд╣реИрдВ);
- рдкрд░рд┐рдгрд╛рдореА рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдХрд╛ рдЖрд╡рдВрдЯрди (рдкреНрд░рддреНрдпреЗрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА);
- рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдкреНрд░рд╛рд░рдВрдн;
- рдкреВрд░реНрд╡-рддреИрдпрд╛рд░ рд╕рд░рдгреА рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд╕рд╣реЗрдЬрдиреЗ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреА рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛;
- рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдкреВрд░рд╛ рдХрд░рдирд╛;
- рдбреЗрдЯрд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг:
рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдПрдХ рдЪрд┐рддреНрд░рдордп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдиреАрдЪреЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИредрдкрд╣рд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдо
EPPlus 5 рдФрд░ EPPlus 4 рдХреЗ рдкрд░рд┐рдгрд╛рдо рд╕рдВрдпреБрдХреНрдд рдХреНрдпреЛрдВ рд╣реИрдВ?EPPlus . , , . , . EPPlus 5 , . , EPPlus, .
рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдкрд╣рд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдиреЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдмреАрдЪ рдиреЗрддрд╛рдУрдВ рдХреЛ рддреБрд░рдВрдд рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдЖрдВрдХрдбрд╝реЛрдВ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреВрд░реНрдг рдиреЗрддрд╛ EPPlus рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИредрдкрд░рд┐рдгрд╛рдо рдореВрд▓ рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВредрдЗрд╕реЗ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдкрд╣рд▓рд╛ рд╕рдВрджреЗрд╣ рд╕рд╛рдордиреЗ рдЖрдпрд╛: рдирддреАрдЬреЗ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рдереЗредрд╕реНрдкрд╛рдпрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВSpire , InvalidCastException. , Excel- , , , . try...catch. , .
рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдкрд╣рд▓реА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рд░реЗрдХ
рдКрдкрд░, рдореИрдВрдиреЗ рдЖрдкрдХреЛ рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рдЕрдкрдирд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛, рдЬрд┐рд╕рдиреЗ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рдИред рд╣рдореЗрдВ рд╕рдВрджреЗрд╣ рдерд╛ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрдХреНрд╕реЗрд▓ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдлреЙрд░реНрдореВрд▓реЗ рдЖрджрд┐рдо рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реЛрдВрдЧреЗ, рдЬреЛ рдЕрдВрджрд░ рдХреА рдХрдИ рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рд╕рдВрджреЗрд╣ рдирд╣реАрдВ рдерд╛ рдХрд┐ рдЗрд╕рд╕реЗ рд╕рдВрдХреЗрддрдХ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд░ рднреА, рд╢реБрд░реВ рдореЗрдВ, рдЬрдм рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛, рдФрд░ рдЧреНрд░рд╛рд╣рдХ рд╕реЗ рдбреЗрдЯрд╛ (рдХрдо рд╕реЗ рдХрдо рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рдХрд┐ рдЕрдВрддрд┐рдо рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо 120 рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдХрд┐ рд╣рдореЗрдВ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдФрд░ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред редрд╣рдо рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЕрдЧрд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдирдпрд╛ рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЖрдЗрдП рд╣рдо 10 рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд 4 рдирдП рдлрд╝рд╛рд░реНрдореБрд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ 1 рдПрдЧреНрд░реАрдЧреЗрдЯрд┐рдВрдЧ рдлреЙрд░реНрдореВрд▓рд╛ рд╣реИ, рдЬреЛ рдлрд╝рд╛рд░реНрдореБрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдЗрди рдЪрд╛рд░ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдФрд░ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдкрд░ рднреА рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛редрдирдпрд╛ рдлреЙрд░реНрдореВрд▓рд╛ рдЬреЛ рдмрд╛рдж рдХреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:public double Execute(double[] p)
{
var price1 = Math.Pow(p[0] * p[8] / p[4] * Math.Sin(p[5]) * Math.Cos(p[2]) +
Math.Abs(p[1] - (p[2] + p[3] + p[4] + p[5] + p[6] + p[7] + p[8]))
* Math.Sqrt(p[0] * p[0] + p[1] * p[1]) / 2.0 * Math.PI, p[9]);
var price2 = p[4] * p[5] * p[2] / Math.Max(1, Math.Abs(p[7]));
var price3 = Math.Abs(p[7] - p[3]) * p[2];
var price4 = Math.Sqrt(Math.Abs(p[1] * p[2] + p[3] * p[4] + p[5] * p[6]) + 1.0);
var price5 = p[0] * Math.Cos(p[1]) + p[2] * Math.Sin(p[1]);
var sum = p[0] + p[1] + p[2] + p[3] + p[4] + p[5] + p[6] + p[7] + p[8] + p[9];
var price6 = sum / Math.Max(1, Math.Abs((p[0] + p[1] + p[2] + p[3]) / 4.0))
+ sum / Math.Max(1, Math.Abs((p[4] + p[5] + p[6] + p[7] + p[8] + p[9]) / 6.0));
var pricingAverage = (price1 + price2 + price3 + price4 + price5 + price6) / 6.0;
return pricingAverage / Math.Max(1, Math.Abs(price1 + price2 + price3 + price4 + price5 + price6));
}
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕реВрддреНрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЧрдпрд╛, рдЬреЛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ - рдмреЗрд╣рддрд░ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдиреАрдЪреЗ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЧрдИ рд╣реИ:рдиреЛрдЯ: рдХреНрдпреЛрдВрдХрд┐ рдПрдХреНрд╕реЗрд▓ рдЗрдВрдЯрд░реЛрдк рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ, рдЪрд╛рд░реНрдЯ рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдерд╛редрдЬреИрд╕рд╛ рдХрд┐ рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдкрдпреБрдХреНрдд рд╣реЛ рдЧрдИ рд╣реИред рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЙрджрд╛рд╕, рдЕрдзреНрдпрдпрди рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдХреЙрдлреА рдФрд░ рдЧреЛрддрд╛ рд╕рд┐рд░ - рд╕реНрдЯреЙрдХ рдкреАрдврд╝реА рдореЗрдВ рд╕реАрдзреЗред рдХреЛрдб рдЬрдирд░реЗрд╢рди
рдпрджрд┐ рдЖрдк рдЕрдЪрд╛рдирдХ рдПрдХ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рднреНрд░рдордг рдХрд░реЗрдВрдЧреЗред рдХреЛрдб рдкреАрдврд╝реА рдмрд╛рдж рдХреЗ рд╕рдВрдХрд▓рди рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рд╛рде рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╕реНрд░реЛрдд рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдХреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рди рд╣реЛрдиреЗ рд╡рд╛рд▓реА рджреЛрдиреЛрдВ рд╕реНрдерд┐рд░ рдХреЛрдб рдкреАрдврд╝реА рд╣реИ (рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ T4MVC рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВ, рдЬреЛ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдФрд░ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирдпрд╛ рдХреЛрдб рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореБрдЦреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╕рдордп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рдФрд░ рдЧрддрд┐рд╢реАрд▓ рдХреЛрдб рдЬреЛ рдХрд┐ рд╕рдордп рдХреЗ рджреМрд░рд╛рди рдЪрд▓рддрд╛ рд╣реИред рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдп рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ (рдПрдХреНрд╕реЗрд▓ рд╕реЗ рд╕реВрддреНрд░) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╣реИ, рдЬреЛ рдЗрдирдкреБрдЯ рдорд╛рдиреЛрдВ рдХреЗ рд╡реЗрдХреНрдЯрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИредрдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП:- рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╕реВрддреНрд░ рдкрдврд╝реЗрдВ;
- рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдПрдХрддреНрд░ рдХрд░реЗрдВ;
- C#;
- ;
- ;
- .
рдкреНрд░рд╕реНрддреБрдд рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реВрддреНрд░ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, EPPlus рдкреБрд╕реНрддрдХрд╛рд▓рдп рдРрд╕реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд┐рдХрд▓рд╛ ред рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рдЕрдлрд╡рд╛рд╣ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЯреЛрдХрди рдХреА рдПрдХ рд╕реВрдЪреА рдмрдирд╛рдиреЗ рдФрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкреЗрдбрд╝ рдореЗрдВ рдЗрд╕рдХреЗ рдЖрдЧреЗ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдЦреЛрдЬ рдХреАред рдмрд┐рдВрдЧреЛ, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛! рдмреЙрдХреНрд╕ рд╕реЗ рдПрдХ рддреИрдпрд╛рд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкреЗрдбрд╝ рдЖрджрд░реНрд╢ рд╣реИ, рдмрд╕ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдПрдВ рдФрд░ рд╣рдорд╛рд░реЗ рд╕реА # рдХреЛрдб рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рдПрдХ рдмрдбрд╝реА рдкрдХрдбрд╝ рдореЗрд░реЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реА рдереА рдЬрдм рдореИрдВрдиреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкреЗрдбрд╝ рдХреЗ рдиреЛрдбреНрд╕ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдХреБрдЫ рдиреЛрдбреНрд╕, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХреНрд╕реЗрд▓ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рдХреЙрд▓, рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдЙрд╕рдХреЗ рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рдордЭрд╛рдпрд╛ рдФрд░ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдХреЛрдИ рдЦреБрд▓реА рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХреАред рдЗрд╕рд▓рд┐рдП, рддреИрдпрд╛рд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдкреЗрдбрд╝ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░рдирд╛ рдкрдбрд╝рд╛редрд╣рдо рдПрдХ рд╕реНрддрд░ рдиреАрдЪреЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЯреЛрдХрди рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЯреЛрдХрди рд╣реИрдВ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдкреНрд░рдХрд╛рд░ рдФрд░ рдореВрд▓реНрдп рд╣реИрдВред рдЪреВрдВрдХрд┐ рд╣рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдлрд┐рд░ рд╣рдо рдЗрд╕рдХреЗ рдмрдЬрд╛рдп C рдореЗрдВ рдкреЗрдбрд╝ рдХреЗ рдЯреЛрдХрди рдХреЛ рдмрд░рд╛рдмрд░ рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдореБрдЦреНрдп рдмрд╛рдд рд╕рдВрдЧрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдЧрдгрд┐рддреАрдп рдХрд╛рд░реНрдп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрдЧрдд рдереЗ - рдЬреИрд╕реЗ рдХреЛрд╕рд╛рдЗрди рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛, рд╕рд╛рдЗрди рдХрд░рдирд╛, рд░реВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдПрдХ рд╢рдХреНрддрд┐ рдХреЛ рдКрдкрд░ рдЙрдард╛рдирд╛ред рд▓реЗрдХрд┐рди рдПрдХрддреНрд░реАрдХрд░рдг рдХрд╛рд░реНрдп - рдЬреИрд╕реЗ рдХрд┐ рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдп, рдиреНрдпреВрдирддрдо, рд░рд╛рд╢рд┐ - рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХреНрд╕реЗрд▓ рдореЗрдВ, рдпреЗ рдлрд╝рдВрдХреНрд╢рди рдорд╛рдиреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреА рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд▓реЗрддреЗ рд╣реИрдВ, рдкрд╣рд▓реЗ рдПрдХ рд░реИрдЦрд┐рдХ рд╕реВрдЪреА рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдХреА рд╕реАрдорд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВредрдЗрд╕ рддрд░рд╣ рд╣рдореЗрдВ рдПрдХреНрд╕реЗрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реЗ C # рд╕рд┐рдВрдЯреИрдХреНрд╕ рддрдХ рд╕рд╣реА рдФрд░ рд╕рдВрдЧрдд рд░реВрдкрд╛рдВрддрд░рдг рдорд┐рд▓рддрд╛ рд╣реИред рдиреАрдЪреЗ рдПрдХреНрд╕реЗрд▓ рдлреЙрд░реНрдореВрд▓реЗ рд╕реЗ рдЯреЛрдХрди рдХреА рд╕реВрдЪреА рдХреЛ рдорд╛рдиреНрдп C # рдХреЛрдб рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдореБрдЦреНрдп рдХреЛрдб рд╣реИредprivate string TransformToSharpCode(string formula, ParsingContext parsingContext)
{
// Initialize basic compile components, e.g. lexer
var lexer = new Lexer(parsingContext.Configuration.FunctionRepository, parsingContext.NameValueProvider);
// List of dependency variables that can be filled during formula transformation
var variables = new Dictionary<string, string>();
using (var scope = parsingContext.Scopes.NewScope(RangeAddress.Empty))
{
// Take resulting code line
var compiledResultCode = TransformToSharpCode(formula, parsingContext, scope, lexer, variables);
var output = new StringBuilder();
// Define dependency variables in reverse order.
foreach (var variableDefinition in variables.Reverse())
{
output.AppendLine($"var {variableDefinition.Key} = {variableDefinition.Value};");
}
// Take the result
output.AppendLine($"return {compiledResultCode};");
return output.ToString();
}
}
private string TransformToSharpCode(ICollection<Token> tokens, ParsingContext parsingContext, ParsingScope scope, ILexer lexer, Dictionary<string, string> variables)
{
var output = new StringBuilder();
foreach (Token token in tokens)
{
switch (token.TokenType)
{
case TokenType.Function:
output.Append(BuildFunctionName(token.Value));
break;
case TokenType.OpeningParenthesis:
output.Append("(");
break;
case TokenType.ClosingParenthesis:
output.Append(")");
break;
case TokenType.Comma:
output.Append(", ");
break;
case TokenType.ExcelAddress:
var address = token.Value;
output.Append(TransformAddressToSharpCode(address, parsingContext, scope, lexer, variables));
break;
case TokenType.Decimal:
case TokenType.Integer:
case TokenType.Boolean:
output.Append(token.Value);
break;
case TokenType.Operator:
output.Append(token.Value);
break;
}
}
return output.ToString();
}
рд░реВрдкрд╛рдВрддрд░рдг рдореЗрдВ рдЕрдЧрд▓реА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдореЗрдВ рдПрдХреНрд╕реЗрд▓ рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рд╡реЗ рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕реА # рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд▓рдкреЗрдЯрдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рд╢реНрди рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ: рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рд╕реЗрд▓ рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рд░реВрдкрд╛рдВрддрд░рдгред рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЬрд╣рд╛рдВ рдЯреЛрдХрди рдореЗрдВ рд╕реЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ, рд╣рдо рдкрд╣рд▓реЗ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рд╕реЗрд▓ рдореЗрдВ рдХреНрдпрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред рдпрджрд┐ рдпрд╣ рдПрдХ рд╕реВрддреНрд░ рд╣реИ, рддреЛ рдЗрд╕реЗ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░реЗрдВред рдпрджрд┐ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ C # -рдирд▓реЙрдЬ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлреЙрд░реНрдо рдХрд╛ p[row, column]
, рдЬрд╣рд╛рдВ рдпрд╣ p
рджреЛ-рдЖрдпрд╛рдореА рд╕рд░рдгреА рдпрд╛ рд╕рд╣реА рдбреЗрдЯрд╛ рдореИрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреНрд░рдорд┐рдд рдПрдХреНрд╕реЗрд╕ рдХреНрд▓рд╛рд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рд╛рде, рд╣рдо рдРрд╕рд╛ рд╣реА рдХрд░рддреЗ рд╣реИрдВ, рдмрд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╕реАрдорд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдПрдХреНрд╕реЗрд▓ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рддреЗ рд╕рдордп рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдХрд╡рд░ рдХрд░рддреЗ рд╣реИрдВред рдиреАрдЪреЗ рдПрдХ рдПрдХреНрд╕реЗрд▓ рд╕реНрдкреНрд░реЗрдбрд╢реАрдЯ рд╕реЗрд▓ рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рд╡реИрдз C # рдХреЛрдб рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:private string TransformAddressToSharpCode(string excelAddress, ParsingContext parsingContext, ParsingScope scope, ILexer lexer, Dictionary<string, string> variables)
{
// Try to parse excel range of addresses
// Currently, reference to another worksheet in address string is not supported
var rangeParts = excelAddress.Split(':');
if (rangeParts.Length == 1)
{
// Unpack single excel address
return UnpackExcelAddress(excelAddress, parsingContext, scope, lexer, variables);
}
// Parse excel range address
ParseAddressToIndexes(rangeParts[0], out int startRowIndex, out int startColumnIndex);
ParseAddressToIndexes(rangeParts[1], out int endRowIndex, out int endColumnIndex);
var rowDelta = endRowIndex - startRowIndex;
var columnDelta = endColumnIndex - startColumnIndex;
var allAccessors = new List<string>(Math.Abs(rowDelta * columnDelta));
// TODO This part of code doesn't support reverse-ordered range address
for (var rowIndex = startRowIndex; rowIndex <= endRowIndex; rowIndex++)
{
for (var columnIndex = startColumnIndex; columnIndex <= endColumnIndex; columnIndex++)
{
// Unpack single excel address
allAccessors.Add(UnpackExcelAddress(rowIndex, columnIndex, parsingContext, scope, lexer, variables));
}
}
return string.Join(", ", allAccessors);
}
private string UnpackExcelAddress(string excelAddress, ParsingContext parsingContext, ParsingScope scope, ILexer lexer, Dictionary<string, string> variables)
{
ParseAddressToIndexes(excelAddress, out int rowIndex, out int columnIndex);
return UnpackExcelAddress(rowIndex, columnIndex, parsingContext, scope, lexer, variables);
}
private string UnpackExcelAddress(int rowIndex, int columnIndex, ParsingContext parsingContext, ParsingScope scope, ILexer lexer, Dictionary<string, string> variables)
{
var formula = parsingContext.ExcelDataProvider.GetRangeFormula(_worksheet.Name, rowIndex, columnIndex);
if (string.IsNullOrWhiteSpace(formula))
{
// When excel address doesn't contain information about any excel formula, we should just use external input data parameter provider.
return $"p[{rowIndex},{columnIndex}]";
}
// When formula is provided, try to identify that variable is not defined yet
// TODO Worksheet name is not included in variable name, potentially that can cause conflicts
// Extracting and reusing calculations via local variables improves performance for 0.0045ms
var cellVariableId = $"C{rowIndex}R{columnIndex}";
if (variables.ContainsKey(cellVariableId))
{
return cellVariableId;
}
// When variable does not exist, transform new formula and register that to variable scope
variables.Add(cellVariableId, TransformToSharpCode(formula, parsingContext, scope, lexer, variables));
return cellVariableId;
}
рдпрд╣ рдХреЗрд╡рд▓ рдкрд░рд┐рдгрд╛рдореА рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХреЛрдб рдХреЛ рдПрдХ рд╕реНрдерд┐рд░ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ, рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЛ рд╕рдВрдЧрддрддрд╛ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рдЧрддрд┐рд╢реАрд▓ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд░реЗрдВ, рд╣рдорд╛рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд▓рд┐рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ - рдФрд░ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд░реИрдкрд░ рдХреНрд▓рд╛рд╕ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдФрд░ рд╕рдордп рдорд╛рдкрди рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВред public void SetUp()
{
// Initialize excel package by EPPlus library
_package = new ExcelPackage(new FileInfo(_fileName));
_workbook = _package.Workbook;
_worksheet = _workbook.Worksheets[1];
_inputRange = new ExcelRange[10];
for (int rowIndex = 0; rowIndex < 10; rowIndex++)
{
_inputRange[rowIndex] = _worksheet.Cells[rowIndex + 1, 2];
}
// Access to result cell and extract formula string
_resultRange = _worksheet.Cells[11, 2];
var formula = _resultRange.Formula;
// Initialize parsing context and setup data provider
var parsingContext = ParsingContext.Create();
parsingContext.ExcelDataProvider = new EpplusExcelDataProvider(_package);
// Transform Excel formula to CSharp code
var sourceCode = TransformToSharpCode(formula, parsingContext);
// Compile CSharp code to IL dynamic assembly via helper wrappers
_code = CodeGenerator.CreateCode<double>(
sourceCode,
new string[]
{
// List of used namespaces
"System", // Required for Math functions
"ExcelCalculations.PerformanceTests" // Required for Excel function wrappers stored at ExcelCompiledFunctions static class
},
new string[]
{
// Add reference to current compiled assembly, that is required to use Excel function wrappers located at ExcelCompiledFunctions static class
"....\\bin\\Debug\\ExcelCalculations.PerformanceTests.exe"
},
// Notify that this source code should use parameter;
// Use abstract p parameter - interface for values accessing.
new CodeParameter("p", typeof(IExcelValueProvider))
);
}
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╣реИ рдФрд░ рдЗрд╕реЗ EPPlusCompiled, Mark-I рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ ред рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИред рддреНрд╡рд░рдг рд▓рдЧрднрдЧ 300 рдЧреБрдирд╛ рд╣реИред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рдЕрднреА рднреА рдореВрд▓ рдирд┐рд╡рд╛рд╕реА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 16 рдЧреБрдирд╛ рдзреАрдорд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?рд╣рд╛рдБ рддреБрдо рдХрд░ рд╕рдХрддреЗ рд╣реЛ! рдЖрдЗрдП рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдкрд░рд┐рдгрд╛рдо рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ рд╣рдо рд╕рднреА рд▓рд┐рдВрдХ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдХреНрд╖реЛрдВ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рд░реНрдореБрд▓реЛрдВ рд╡рд╛рд▓реЗ рдЪрд░ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреЗрдВрдЧреЗред рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рд╕реВрддреНрд░ рдореЗрдВ рдирд┐рд░реНрднрд░ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдХрдИ рдЙрдкрдпреЛрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЕрдиреБрд╡рд╛рджрдХ рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╣рдореЗрдВ рдПрдХ рд╣реА рдбреЗрдЯрд╛ рдХреЗ рдХрдИ рдЧрдгрдирд╛ рдкреНрд░рд╛рдкреНрдд рд╣реБрдПред рдЗрд╕рд▓рд┐рдП, рдЧрдгрдирд╛ рдореЗрдВ рдордзреНрдпрд╡рд░реНрддреА рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред рдирд┐рд░реНрднрд░ рдЪрд░ рдХреА рдкреАрдврд╝реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ 2 рдЧреБрдирд╛ рдЕрдзрд┐рдХ рдХреА рдкреНрд░рджрд░реНрд╢рди рд╡реГрджреНрдзрд┐ рд╣реБрдИред рдЗрд╕ рд╕реБрдзрд╛рд░ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИEPPlusCompiled, Mark-II ред рддреБрд▓рдирд╛ рддрд╛рд▓рд┐рдХрд╛ рдиреАрдЪреЗ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЧрдИ рд╣реИ:рдЗрди рд╢рд░реНрддреЛрдВ рдФрд░ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЧрдИ рд╕рдордп рд╕реАрдорд╛ рдХреЗ рддрд╣рдд, рд╣рдореЗрдВ рдПрдХ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рд╛ рд╣реИ рдЬреЛ рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╣рдореЗрдВ рдореВрд▓ рдХреЛрдб рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдХрд░реАрдм рд▓рд╛рддрд╛ рд╣реИ - рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдореЗрдВ 8 рдЧреБрдирд╛, рдкрд░рд┐рдорд╛рдг рдХреЗ рдХрдИ рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдЕрдВрддрд░рд╛рд▓, 30 рдмрд╛рд░ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдирд╛ рдФрд░ рдореВрд▓ рдХреЛрдб рдХреЗ рдХрд░реАрдм рдкрд╣реБрдВрдЪрдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдпрджрд┐ рдЖрдк рд╕рдордп рд╕реАрдорд╛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдХрд┐рддрдирд╛ рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛?рдореЗрд░рд╛ рдЬрд╡рд╛рдм рд╣рд╛рдВ рд╣реИ, рд▓реЗрдХрд┐рди, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореЗрд░реЗ рдкрд╛рд╕ рдЗрди рддрдХрдиреАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рдерд╛ред рд╢рд╛рдпрдж рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рд╕рдорд░реНрдкрд┐рдд рдХрд░реВрдВрдЧрд╛ред рдлрд┐рд▓рд╣рд╛рд▓, рдореИрдВ рдХреЗрд╡рд▓ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░реЛрдВ рдФрд░ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЙрдиреНрд╣реЗрдВ рд▓рдШреБ рдЕрдореВрд░реНрдд рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд░рд┐рд╡рд░реНрд╕ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдореЗрд╢рди рджреНрд╡рд╛рд░рд╛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд░рд┐рд╡рд░реНрд╕ рд░реВрдкрд╛рдВрддрд░рдг рджреНрд╡рд╛рд░рд╛, рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореВрд▓ рдХреЛрдб рдХреА рдЧрд┐рд░рд╛рд╡рдЯ, рд╣рд╛рде рд╕реЗ рд▓рд┐рдЦреА рдЧрдИ, рдЙрддреНрдкрдиреНрди рдХреЛрдб рдХреА рджрд┐рд╢рд╛ рдореЗрдВред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ рдХреБрдЫ рд╢реЛрдзреЛрдВ рдХреЛ рд╢реАрдШреНрд░рддрд╛ рд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЗ рддрд╣рдд рдореВрд▓ рдХреЛрдб рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХреИрд╕реЗ рдмрд┐рдЧрдбрд╝ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдпрджрд┐ рдЙрддреНрдкрдиреНрди рдХреЛрдб рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рдкрд░реАрдд рджрд┐рд╢рд╛ рдореЗрдВ рд╕реБрдзрд╛рд░рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдПрдХ рд╕рдорд╛рди рдЧреБрдгрд╛рдВрдХ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрдПрдмреНрд╕рдЯреНрд░реИрдХреНрдЯ
- , ;
- inline ;
- - Sum, Max, Min ;
- Sum inline ;
- ( ) .

рдХрджрдо рдмрдврд╝рд╛рддреЗ рд╣реБрдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХрд╕реНрдЯрдо рдПрдХреНрд╕реЗрд▓ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рд╕реЗ рд╕реАрдзреЗ рдлреЙрд░реНрдореВрд▓реЗ рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЦреЛрдиреЗ рдХреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рднреА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдПрдХреНрд╕реЗрд▓ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд▓рдЪреАрд▓реЗрдкрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЗрддрдиреА рдХрдо рд╡рд┐рдХрд╛рд╕ рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕реЗрд▓ рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдПрдХ рд╣реА рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛?рдФрд░ рдПрдХреНрд╕реЗрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рдЕрд╕рд╛рдорд╛рдиреНрдп рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдПрдХреАрдХрд░рдг рдХреНрдпрд╛ рдереЗ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдерд╛?