#include "pch.h"
|
#include "ExcelUtil.h"
|
#include "json/json.h"
|
#include "xlslib.h"
|
#include <libxls/xlsstruct.h>
|
using namespace xls;
|
using namespace xlslib_core;
|
|
void ExcelUtil::save(list<TradeData> data, string path) {
|
list<TradeData>::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<Json::StreamWriter> 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<TradeData>::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<ExcelGPCodeInfo> 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<ExcelGPCodeInfo> 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;
|
}
|