This commit is contained in:
Kane Wang 2020-03-18 20:42:45 +08:00
parent 13309fcf74
commit 1c61f5c9c5
1 changed files with 47 additions and 32 deletions

View File

@ -11,26 +11,26 @@ 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,
unsigned int titleRowIndex, unsigned int titleRowIndex,
unsigned int firstRowIndex, unsigned int firstRowIndex,
const std::string & tnsName, const std::string& tnsName,
const std::string & userName, const std::string& userName,
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; //最后一列
@ -38,24 +38,24 @@ 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();
@ -63,18 +63,33 @@ void RepairMonitoringFromExcelToOracle( const std::wstring & filePath,
firstRowIndex = pSheet->firstRow(); firstRowIndex = pSheet->firstRow();
lastRowIndex = pSheet->lastRow(); lastRowIndex = pSheet->lastRow();
unsigned int index = firstColumnIndex; unsigned int colIndex = firstColumnIndex;
unsigned int rowIndex = firstRowIndex;
//保存标题 //保存标题
while ( index <= lastColumnIndex ) while (colIndex <= lastColumnIndex)
{ {
wstring && title = ReadCellStringFromXlsx( pBook, sheetIndex, titleRowIndex, index, false ); wstring&& title = ReadCellStringFromXlsx(pBook, sheetIndex, titleRowIndex, colIndex, false);
titleMap.insert( pair<int, wstring>( index, title ) ); titleMap.insert(pair<int, wstring>(colIndex, title));
++index; ++colIndex;
} }
//逐行保存数据 //逐行保存数据
for (rowIndex = firstRowIndex; rowIndex >= lastRowIndex; rowIndex++)
{
//如果是标题行,就跳过
if (rowIndex == titleRowIndex)
{
continue;
}
//逐列绑定sql语句
for (colIndex = firstColumnIndex; colIndex <= lastColumnIndex; colIndex++)
{
}
}
} }