This commit is contained in:
Kane Wang 2020-05-12 16:48:05 +08:00
commit 571779d33a
1 changed files with 50 additions and 20 deletions

View File

@ -11,6 +11,7 @@ using namespace std;;
using namespace ocilib; using namespace ocilib;
using namespace libxl; using namespace libxl;
void RepairMonitoringFromExcelToOracle( const std::wstring & filePath, void RepairMonitoringFromExcelToOracle( const std::wstring & filePath,
unsigned int sheetIndex, unsigned int sheetIndex,
bool hasTitleRow, bool hasTitleRow,
@ -19,17 +20,17 @@ void RepairMonitoringFromExcelToOracle( const std::wstring & filePath,
const std::string & password ) const std::string & password )
{ {
//防御性验证 //防御性验证
if ( filePath.empty() == true || if (filePath.empty() == true ||
tnsName.empty() == true || tnsName.empty() == true ||
userName.empty() == true || userName.empty() == true ||
password.empty() == true ) password.empty() == true)
{ {
throw runtime_error( "参数错误!" ); throw runtime_error("参数错误!");
} }
//libxl对象 //libxl对象
Book * pBook = xlCreateBookW(); Book* pBook = xlCreateBookW();
Sheet * pSheet = nullptr; Sheet* pSheet = nullptr;
map<int, wstring> titleMap; //存放标题行 map<int, wstring> titleMap; //存放标题行
unsigned int firstColumnIndex; //第一列 unsigned int firstColumnIndex; //第一列
unsigned int lastColumnIndex; //最后一列 unsigned int lastColumnIndex; //最后一列
@ -37,34 +38,36 @@ void RepairMonitoringFromExcelToOracle( const std::wstring & filePath,
unsigned int lastRowIndex; unsigned int lastRowIndex;
//ocilib对象 //ocilib对象
Connection * pConnection = nullptr; Connection* pConnection = nullptr;
Statement * pStatement = nullptr; Statement* pStatement = nullptr;
if ( pBook == nullptr ) if (pBook == nullptr)
{ {
throw runtime_error( "libxl初始化失败" ); throw runtime_error("libxl初始化失败");
} }
if ( pBook->load( filePath.c_str() ) != true ) if (pBook->load(filePath.c_str()) != true)
{ {
throw runtime_error( "打开excel文件失败" ); throw runtime_error("打开excel文件失败");
} }
pSheet = pBook->getSheet( sheetIndex ); pSheet = pBook->getSheet(sheetIndex);
if ( pSheet == nullptr ) if (pSheet == nullptr)
{ {
throw runtime_error( "读取sheet失败失败" ); throw runtime_error("读取sheet失败失败");
} }
firstColumnIndex = pSheet->firstCol(); firstColumnIndex = pSheet->firstCol();
lastColumnIndex = pSheet->lastCol(); lastColumnIndex = pSheet->lastCol();
firstRowIndex = pSheet->firstRow(); firstRowIndex = pSheet->firstRow();
lastRowIndex = pSheet->lastRow(); lastRowIndex = pSheet->lastRow();
unsigned int index = firstColumnIndex; unsigned int colIndex = firstColumnIndex;
unsigned int rowIndex = firstRowIndex;
//保存标题 //保存标题
<<<<<<< HEAD
if (hasTitleRow) if (hasTitleRow)
{ {
while (index <= lastColumnIndex) while (index <= lastColumnIndex)
@ -78,4 +81,31 @@ void RepairMonitoringFromExcelToOracle( const std::wstring & filePath,
} }
//逐行保存数据 //逐行保存数据
=======
while (colIndex <= lastColumnIndex)
{
wstring&& title = ReadCellStringFromXlsx(pBook, sheetIndex, titleRowIndex, colIndex, false);
titleMap.insert(pair<int, wstring>(colIndex, title));
++colIndex;
}
//逐行保存数据
for (rowIndex = firstRowIndex; rowIndex >= lastRowIndex; rowIndex++)
{
//如果是标题行,就跳过
if (rowIndex == titleRowIndex)
{
continue;
}
//逐列绑定sql语句
for (colIndex = firstColumnIndex; colIndex <= lastColumnIndex; colIndex++)
{
}
}
>>>>>>> 1c61f5c9c59d272bf37edf8d9217c4389b802ceb
} }