C # рдореЗрдВ Excel рд╕реЗ рд╕реВрддреНрд░ рдХреА рддреНрд╡рд░рд┐рдд рдЧрдгрдирд╛

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

C # рдореЗрдВ Excel рд╕реЗ рд╕реВрддреНрд░ рдХреА рддреНрд╡рд░рд┐рдд рдЧрдгрдирд╛

рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХреНрд╕реЗрд▓ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдкрд╛рджрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЪреБрдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдпрджрд┐ рдЖрдк рдЬрдЯрд┐рд▓ рд╡рд┐рддреНрддреАрдп (рдФрд░ рди рдХреЗрд╡рд▓) рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдХрд░рдг рдХреЗ рд╕рд╛рде рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХреЗ рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдФрд░ рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдХрд░рдг рдХреЗ рд╕рд╛рде, рдмрд┐рд▓реНрд▓реА рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

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

рд╣рдо рдЗрдирдкреБрдЯ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рджреЗрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдХрд┐рд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдерд╛:

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

рдпрд╣ рдмрд╣реБрдд рд╣реА рдЕрд╕рд╛рдорд╛рдиреНрдп рдФрд░ рд╕реБрдкрд░ рд▓реБрднрд╛рд╡рдирд╛ рд▓рдЧрддрд╛ рд╣реИ, рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ!

рдЯрд░реНрдирдХреА рд╕рдорд╛рдзрд╛рди рдФрд░ рдбреЗрдЯрд╛ рддреИрдпрд╛рд░реА


рдЬрдЯрд┐рд▓ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рд╢реЛрдз StackOverflow, GitHub рдФрд░ рдХрдИ рдордВрдЪреЛрдВ рдкрд░ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред

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

рдкреБрд╕реНрддрдХрд╛рд▓рдпрд╕рдВрдкрд░реНрдХрдкреНрд░рд▓реЗрдЦрдирд▓рд╛рдЗрд╕реЗрдВрд╕
EPPlus 4github.com/JanKallman/EPPlusgithub.com/JanKallman/EPPlus/wikiрдЬреАрдПрдирдпреВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬрдирд░рд▓ рдкрдмреНрд▓рд┐рдХ рд▓рд╛рдЗрд╕реЗрдВрд╕ 
EPPlus 5github.com/EPPlusSoftware/EPPlusgithub.com/EPPlusSoftware/EPPlus/wikiрдкреЙрд▓рд┐рдорд░ рдЧреИрд░-рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рд▓рд╛рдЗрд╕реЗрдВрд╕ 1.0.0 ( www.epplussoftware.com/LicenseOverview
NPOIgithub.com/tonyqus/npoigithub.com/tonyqus/npoi/wikiрдЕрдкрд╛рдЪреЗ рд▓рд╛рдЗрд╕реЗрдВрд╕ 2.0
рд╢рд┐рдЦрд░www.e-iceblue.com/Introduce/excel-for-net-introduce.htmlwww.e-iceblue.com/Tutorials/Spire.XLS/Spire.XLS-Program-Guide/Spire.XLS-Program-Guide-Content.htmlwww.e-iceblue.com/Tutorials/Licensing/License-Agreement.html 
Excel Interop(Microsoft.Office.Interop.Excel)n/adocs.microsoft.com/ru-ru/dotnet/api/microsoft.office.interop.excel._workbook?view=excel-piaExcel

рдЕрдЧрд▓рд╛ рдХрджрдо рд▓реЛрдб рдЯреЗрд╕реНрдЯ рд▓рд┐рдЦрдирд╛ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд░рдирдЯрд╛рдЗрдо рдХреЛ рдорд╛рдкрдирд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░реЗрдВред рд╣рдо рдПрдХ рдирдИ рдПрдХреНрд╕реЗрд▓ рдлрд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП 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 4
рдФрд░ EPPlus 5
NPOIрд╢рд┐рдЦрд░рдПрдХреНрд╕реЗрд▓ рдЗрдВрдЯрд░реЙрдк
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдордп (рдПрдордПрд╕)02572666321653
рдмреБрдз 1 рдкрд╛рд╕ (рдПрдордПрд╕) рдХреЗ рд▓рд┐рдП рд╕рдордп0,00020.40860.68476.978238.8423
рдФрд╕рдд рд╡рд┐рдЪрд▓рди0,0003940,0003950,0002370,000631рдПрди / рдП
рд╢реБрджреНрдзрддрд╛99.99%99.92%99.97%99.84%рдПрди / рдП
рдЧрд▓рддрд┐рдпрд╛рдВ0,0%1.94%1.94%1.52%1.94%

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));
}

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕реВрддреНрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЧрдпрд╛, рдЬреЛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ - рдмреЗрд╣рддрд░ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдиреАрдЪреЗ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЧрдИ рд╣реИ:

рд╕реВрдЪреАрджреЗрд╢реАEPPlus 4 EPPlus 5NPOIрд╢рд┐рдЦрд░рдПрдХреНрд╕реЗрд▓ рдЗрдВрдЯрд░реЙрдк
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдордп (рдПрдордПрд╕)02413687221640
рдмреБрдз 1 рдкрд╛рд╕ (рдПрдордПрд╕) рдХреЗ рд▓рд┐рдП рд╕рдордп0,00040.9174 (+ 124%)1.8996 (+ 177%)7.7647 (+ 11%)50.7194 (+ 30%)
рдФрд╕рдд рд╡рд┐рдЪрд▓рди0,0358840.0000000.0000000.000000рдПрди / рдП
рд╢реБрджреНрдзрддрд╛98.79%100.00%100.00%100.00%рдПрди / рдП
рдЧрд▓рддрд┐рдпрд╛рдВ0,0%0.3%0.3%0.28%0.3%


рдиреЛрдЯ: рдХреНрдпреЛрдВрдХрд┐ рдПрдХреНрд╕реЗрд▓ рдЗрдВрдЯрд░реЛрдк рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ, рдЪрд╛рд░реНрдЯ рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдерд╛ред

рдЬреИрд╕рд╛ рдХрд┐ рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдкрдпреБрдХреНрдд рд╣реЛ рдЧрдИ рд╣реИред рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЙрджрд╛рд╕, рдЕрдзреНрдпрдпрди рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдХреЙрдлреА рдФрд░ рдЧреЛрддрд╛ рд╕рд┐рд░ - рд╕реНрдЯреЙрдХ рдкреАрдврд╝реА рдореЗрдВ рд╕реАрдзреЗред 


рдХреЛрдб рдЬрдирд░реЗрд╢рди


рдпрджрд┐ рдЖрдк рдЕрдЪрд╛рдирдХ рдПрдХ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рднреНрд░рдордг рдХрд░реЗрдВрдЧреЗред 

рдХреЛрдб рдкреАрдврд╝реА рдмрд╛рдж рдХреЗ рд╕рдВрдХрд▓рди рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рд╛рде рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╕реНрд░реЛрдд рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдХреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рди рд╣реЛрдиреЗ рд╡рд╛рд▓реА рджреЛрдиреЛрдВ рд╕реНрдерд┐рд░ рдХреЛрдб рдкреАрдврд╝реА рд╣реИ (рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ 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 ред рддреБрд▓рдирд╛ рддрд╛рд▓рд┐рдХрд╛ рдиреАрдЪреЗ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЧрдИ рд╣реИ:

рдкреБрд╕реНрддрдХрд╛рд▓рдпрдмреБрдз рд╕рдордп (рдПрдордПрд╕)Coefред рдордВрджреА
рджреЗрд╢реА0.000041
EPPlusCompiled, Mark-II0.0038
EPPlusCompiled, Mark-I0.0061рд╕реЛрд▓рд╣
EPPlus1,20893023

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

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

рдПрдмреНрд╕рдЯреНрд░реИрдХреНрдЯ


  1. , ;
  2. inline ;
  3. - Sum, Max, Min ;
  4. Sum inline ;
  5. ( ) .


NativeEPPlus Compiled, Mark-IIEPPlus 4EPPlus 5NPOISpireExcel Interop
()02392413687221640
. 1 ()0,00040,0030,91741,89967,764750,7194
рдФрд╕рдд рд╡рд┐рдЪрд▓рди0,0358840,00,00,00,0рдПрди / рдП
рд╢реБрджреНрдзрддрд╛98.79%100.0%100.0%100.0%100.0%рдПрди / рдП
рдЧрд▓рддрд┐рдпрд╛рдВ0,0%0,0%0.3%0.3%0.28%0.3%

C # рдореЗрдВ Excel рд╕реЗ рд╕реВрддреНрд░ рдХреА рддреНрд╡рд░рд┐рдд рдЧрдгрдирд╛

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

рдФрд░ рдПрдХреНрд╕реЗрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рдЕрд╕рд╛рдорд╛рдиреНрдп рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдПрдХреАрдХрд░рдг рдХреНрдпрд╛ рдереЗ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдерд╛?

All Articles