#include "pch.h" #include "ExcelUtil.h" #include "json/json.h" #include "xlslib.h" #include using namespace xls; using namespace xlslib_core; void ExcelUtil::save(list data, string path) { list::iterator ele1= data.begin(); Json::Value root,item; Json::StreamWriterBuilder writerBuilder; //×Ô¶¯»»ÐÐ writerBuilder.settings_["indentation"] = ""; item["time"] = (*ele1)->time; item["price"] = (*ele1)->price; item["num"] = (*ele1)->num; root[0] = item; std::ostringstream os; std::unique_ptr jsonWriter(writerBuilder.newStreamWriter()); jsonWriter->write(root, &os); string jsonStr = os.str(); CString fstr(jsonStr.c_str()); // AfxMessageBox(fstr); workbook wb; xf_t* xf = wb.xformat(); worksheet* ws; ws = wb.sheet("Sheet1"); // ´Ó0¿ªÊ¼Êý£¬µÚ1ÐУ¬µÚ2ÁУ¬¼´C3 ws->label(0, 0, L"ʱ¼ä", xf); ws->label(0, 1, L"¹É¼Û", xf); ws->label(0, 2, L"ÊÇ·ñÕÇÍ£¼Û", xf); ws->label(0, 3, L"ÊÖÊý", xf); ws->label(0, 4, L"²Ù×÷ÀàÐÍ", xf); int index = 0; list::iterator ele; for (ele = data.begin();ele != data.end();ele++) { TradeData *tradeData = *ele; index++; std::ostringstream out_str; out_str << setiosflags(ios::fixed) << std::setprecision(2) << stof(tradeData->price); string t = tradeData->time; if (tradeData->cancelTime > 0) { t.append(" ").append(to_string(tradeData->cancelTime)); string cancelTimeUnit; if (tradeData->cancelTimeUnit == TIME_SECOND) { cancelTimeUnit = "s"; } else if (tradeData->cancelTimeUnit == TIME_MINITE) { cancelTimeUnit = "m"; } else if (tradeData->cancelTimeUnit == TIME_HOUR) { cancelTimeUnit = "h"; } t.append(cancelTimeUnit); } ws->label(index, 0,t, xf); ws->label(index, 1, out_str.str(), xf); if (tradeData->limitPrice == LIMIT_PRICE_NORMAL) { ws->label(index, 2, L"Õý³£¼Û", xf); } else if (tradeData->limitPrice == LIMIT_PRICE_UP) { ws->label(index, 2, L"ÕÇÍ£¼Û", xf); } else if (tradeData->limitPrice == LIMIT_PRICE_DOWN) { ws->label(index, 2, L"µøÍ£¼Û", xf); } ws->label(index, 3, to_string(tradeData->num), xf); wstring operate; switch (tradeData->operateType) { case OPERATE_BUY: operate = L"Âò";break; case OPERATE_BUY_CANCEL: operate = L"Âò³·";break; case OPERATE_SELL: operate = L"Âô";break; case OPERATE_SELL_CANCEL: operate = L"Âô³·";break; default: break; } ws->label(index, 4, operate, xf); } wb.Dump(path); } std::list ExcelUtil::readGPCodes(string path) { xlsWorkBook* pWB = NULL; // ¹¤×÷±í xlsWorkSheet* pWS = NULL; int sheetIndex=0; int row, col; // ´ò¿ªÎļþ pWB = xls_open(path.c_str(), "GBK"); if (!pWB) { throw string("Open File Error!"); } // ½âÎöxlsÎļþ£¬Õâ¸ö²»ÒªÍüÁË xls_parseWorkBook(pWB); pWS = xls_getWorkSheet(pWB, 0); // ½âÎö¹¤×÷±í xls_parseWorkSheet(pWS); // µ¥Ôª¸ñ xlsCell* cell = NULL; // ÿÐÐ std::list codes; for (row = 0; row <= pWS->rows.lastrow; ++row) { ExcelGPCodeInfo info; cell = xls_cell(pWS, row, 0); if (cell && cell->str) { fprintf(stderr, "%s", (char*)cell->str); info.zyltgb = std::string((char*)cell->str); } cell = xls_cell(pWS, row, 1); if (cell && cell->str) { fprintf(stderr, " %s\n", (char*)cell->str); info.code = std::string((char*)cell->str); } codes.push_back(info); } return codes; }