Guest User

Untitled

a guest
Mar 16th, 2016
281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.00 KB | None | 0 0
  1.  
  2.  
  3. #include <vcl.h>
  4. #include <vector>
  5.  
  6. #include "Excel_XP_srvr.h"
  7. #include <OleServer.hpp>
  8. #include "excel_xp_srvr.h"
  9.  
  10.  
  11. #pragma link "Excel_XP_srvr"
  12. #pragma link "excel_xp_srvr"
  13.  
  14.  
  15.  
  16. class XlsHelper
  17. {
  18.     private:
  19.     TExcelApplication * XlsApp;
  20.     TExcelWorkbook * XlsBook;
  21.     TExcelWorksheet * XlsSheet;
  22.     String RangeLeft;
  23.     String RangeRight;
  24.     int myRange; //диапазон значений для выборки из Xls
  25.     int rangeOfMidValue; //указывает +/- диапазон значений выборки из столбца B
  26.     float searchingValueL; //индекс найденного числа
  27.     float searchingValueR; //соответсвенное индексу число в столбце B
  28.  
  29.     public:
  30.     XlsHelper();
  31.     ~XlsHelper();
  32.     inline std::vector<float> MakeMas(AnsiString, float); //возвращает вектор из 7 значений
  33.                                                         //каждый раз обращается к Xls
  34.     float MakeSqrtSum(String); //суммирует все значения и возвращает среднеквадратичное
  35.  
  36.     int LogSearching(Variant& a, float StartingPoint);//возвращает индекс найденного элемента
  37.  
  38.     void setMyRange(int a) { myRange = a; } ;
  39.     int getMyRange() { return myRange; };
  40.  
  41.     float getSearchingValueL() { return searchingValueL; };
  42. };
  43. XlsHelper::XlsHelper()
  44. {
  45.     myRange = 800;
  46.     rangeOfMidValue = 3;
  47. }
  48. XlsHelper::~XlsHelper()
  49. {
  50.     delete XlsApp;
  51.     delete XlsBook;
  52.     delete XlsSheet;
  53. }
  54. std::vector<float> XlsHelper::MakeMas(AnsiString PathToFile, float searchingValue)
  55. {
  56.     XlsApp = new TExcelApplication(NULL);
  57.     std::vector<float> Column;
  58.     XlsApp->Visible[0] = false;
  59.     if (PathToFile.Pos("\r\0"))
  60.         PathToFile = PathToFile.SubString(0, PathToFile.Length()-2);
  61.     XlsApp->Workbooks->Open(WideString(PathToFile));//"c:\\676\\Chiron FZ15W\\0120272323\\2_СВС_03.06.13.xlsx"));
  62.  
  63.     Variant A = XlsApp->Range[Variant("A" + IntToStr(14) +
  64.                               ":B" + IntToStr(myRange) + IntToStr(13))]->get_Value();
  65.                               //получение массива Variant из диапазона файла Xls
  66.     searchingValueL = LogSearching(A, searchingValue);
  67.                                590
  68.     int c = rangeOfMidValue;
  69.     for (int i = 0; i < rangeOfMidValue*2+1; i++)
  70.         Column.push_back(A.GetElement(searchingValueL-(--c),2));
  71.     int si = Column.size();                         // ^ разница в индексах с ренжой из экселя. не забудь!!!
  72.     float a1 = Column[0];
  73.     float a2 = Column[1];
  74.     float a3 = Column[2];
  75.     float a4 = Column[3];
  76.     float a5 = Column[4];
  77.     float a6 = Column[5];
  78.     float a7 = Column[6];
  79.  
  80.     A.Clear();
  81.     return Column;
  82. }
  83.  
  84. float XlsHelper::MakeSqrtSum(String PathToFile)
  85. {
  86.     XlsApp = new TExcelApplication(NULL);
  87.     if (PathToFile.Pos("\r\0"))
  88.         PathToFile = PathToFile.SubString(0, PathToFile.Length()-2);
  89.     XlsApp->Workbooks->Open(WideString(PathToFile));
  90.     Variant A = XlsApp->Range[Variant("A" + IntToStr(14) +
  91.                               ":B" + IntToStr(myRange) + IntToStr(13))]->get_Value();
  92.     float X = 0;
  93.     for (int i = 0; i < myRange; i++)
  94.         X = X + (A.GetElement(i+1,2)*A.GetElement(i+1,2));
  95.     X = Sqrt(X);
  96.     A.Clear();
  97.     return X;
  98. }
  99.  
  100. int XlsHelper::LogSearching(Variant& a, float StartingPoint)
  101. {   //возвращает индекс найденного элемента.
  102.     std::vector<float> ColumnLeft;
  103.     for (int i = 0; i < myRange; i++)
  104.         ColumnLeft.push_back(a.GetElement(i+1,1));
  105.     int iteration = 0, left = 0,
  106.         right = ColumnLeft.size()-1, mid;
  107.         int e = ColumnLeft[0];
  108.         int e1 = ColumnLeft[13];
  109.         int e2 = ColumnLeft[14];
  110.         int e3 = ColumnLeft[799];
  111.         int e4 = ColumnLeft[399];
  112.  
  113.     while(left <= right)
  114.     {
  115.         iteration++;
  116.         mid = (int)((left + right)/2);
  117.         float d = ColumnLeft[mid];
  118.  
  119.         if (StartingPoint == ColumnLeft[mid])
  120.         {
  121.             ColumnLeft.clear();
  122.             return mid;
  123.         }
  124.         else
  125.         {
  126.             if (StartingPoint > ColumnLeft[mid])
  127.             {
  128.                 left = mid + 1;
  129.             }
  130.             else
  131.             {
  132.                 right = mid - 1;
  133.             }
  134.         }
  135.     }
  136.     ColumnLeft.clear();
  137.     return mid;
  138. }
Advertisement
Add Comment
Please, Sign In to add comment