Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vcl.h>
- #include <vector>
- #include "Excel_XP_srvr.h"
- #include <OleServer.hpp>
- #include "excel_xp_srvr.h"
- #pragma link "Excel_XP_srvr"
- #pragma link "excel_xp_srvr"
- class XlsHelper
- {
- private:
- TExcelApplication * XlsApp;
- TExcelWorkbook * XlsBook;
- TExcelWorksheet * XlsSheet;
- String RangeLeft;
- String RangeRight;
- int myRange; //диапазон значений для выборки из Xls
- int rangeOfMidValue; //указывает +/- диапазон значений выборки из столбца B
- float searchingValueL; //индекс найденного числа
- float searchingValueR; //соответсвенное индексу число в столбце B
- public:
- XlsHelper();
- ~XlsHelper();
- inline std::vector<float> MakeMas(AnsiString, float); //возвращает вектор из 7 значений
- //каждый раз обращается к Xls
- float MakeSqrtSum(String); //суммирует все значения и возвращает среднеквадратичное
- int LogSearching(Variant& a, float StartingPoint);//возвращает индекс найденного элемента
- void setMyRange(int a) { myRange = a; } ;
- int getMyRange() { return myRange; };
- float getSearchingValueL() { return searchingValueL; };
- };
- XlsHelper::XlsHelper()
- {
- myRange = 800;
- rangeOfMidValue = 3;
- }
- XlsHelper::~XlsHelper()
- {
- delete XlsApp;
- delete XlsBook;
- delete XlsSheet;
- }
- std::vector<float> XlsHelper::MakeMas(AnsiString PathToFile, float searchingValue)
- {
- XlsApp = new TExcelApplication(NULL);
- std::vector<float> Column;
- XlsApp->Visible[0] = false;
- if (PathToFile.Pos("\r\0"))
- PathToFile = PathToFile.SubString(0, PathToFile.Length()-2);
- XlsApp->Workbooks->Open(WideString(PathToFile));//"c:\\676\\Chiron FZ15W\\0120272323\\2_СВС_03.06.13.xlsx"));
- Variant A = XlsApp->Range[Variant("A" + IntToStr(14) +
- ":B" + IntToStr(myRange) + IntToStr(13))]->get_Value();
- //получение массива Variant из диапазона файла Xls
- searchingValueL = LogSearching(A, searchingValue);
- 590
- int c = rangeOfMidValue;
- for (int i = 0; i < rangeOfMidValue*2+1; i++)
- Column.push_back(A.GetElement(searchingValueL-(--c),2));
- int si = Column.size(); // ^ разница в индексах с ренжой из экселя. не забудь!!!
- float a1 = Column[0];
- float a2 = Column[1];
- float a3 = Column[2];
- float a4 = Column[3];
- float a5 = Column[4];
- float a6 = Column[5];
- float a7 = Column[6];
- A.Clear();
- return Column;
- }
- float XlsHelper::MakeSqrtSum(String PathToFile)
- {
- XlsApp = new TExcelApplication(NULL);
- if (PathToFile.Pos("\r\0"))
- PathToFile = PathToFile.SubString(0, PathToFile.Length()-2);
- XlsApp->Workbooks->Open(WideString(PathToFile));
- Variant A = XlsApp->Range[Variant("A" + IntToStr(14) +
- ":B" + IntToStr(myRange) + IntToStr(13))]->get_Value();
- float X = 0;
- for (int i = 0; i < myRange; i++)
- X = X + (A.GetElement(i+1,2)*A.GetElement(i+1,2));
- X = Sqrt(X);
- A.Clear();
- return X;
- }
- int XlsHelper::LogSearching(Variant& a, float StartingPoint)
- { //возвращает индекс найденного элемента.
- std::vector<float> ColumnLeft;
- for (int i = 0; i < myRange; i++)
- ColumnLeft.push_back(a.GetElement(i+1,1));
- int iteration = 0, left = 0,
- right = ColumnLeft.size()-1, mid;
- int e = ColumnLeft[0];
- int e1 = ColumnLeft[13];
- int e2 = ColumnLeft[14];
- int e3 = ColumnLeft[799];
- int e4 = ColumnLeft[399];
- while(left <= right)
- {
- iteration++;
- mid = (int)((left + right)/2);
- float d = ColumnLeft[mid];
- if (StartingPoint == ColumnLeft[mid])
- {
- ColumnLeft.clear();
- return mid;
- }
- else
- {
- if (StartingPoint > ColumnLeft[mid])
- {
- left = mid + 1;
- }
- else
- {
- right = mid - 1;
- }
- }
- }
- ColumnLeft.clear();
- return mid;
- }
Advertisement
Add Comment
Please, Sign In to add comment