⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 textview.cpp

📁 Resource editor base speadrum Chinese mobile
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	if( pSender != this && lHint == WM_OUTBAR_GOTO )
    {
        CListCtrl &lst = GetListCtrl();

        POSITION pos = lst.GetFirstSelectedItemPosition();
        while( pos != NULL )
        {
            int nSel = lst.GetNextSelectedItem(pos);
            lst.SetItemState(nSel, ~LVIS_SELECTED, LVIS_SELECTED);
        }

        int nItem = (int)pHint;
        
        lst.SetItemState(nItem, LVIS_SELECTED, LVIS_SELECTED);
        lst.EnsureVisible(nItem, TRUE);

        this->SetFocus();
    }
	
}

BOOL CTextView::ImportTxtFromExcel( LPCTSTR pszFileName )
{
	_ASSERTE( pszFileName != NULL );

    CListCtrl &lst = GetListCtrl();
    
    int nListRowCount = lst.GetItemCount();
    int nListColCount = lst.GetHeaderCtrl()->GetItemCount();
	if( 0 == nListColCount )
	{
		AfxMessageBox(_T("List column can't be empty!"));
        return FALSE;
	}
	CMMIRes &mmires = g_theApp.m_MMIRes;
///////////////////////////////////////////////////////////////
	_Application	ExcelApp; 
	Workbooks		wbsWorkbooks; 
	_Workbook		wbWorkbook; 
	Worksheets		wssWorksheets; 
	_Worksheet		wsWorksheet; 
    LPDISPATCH      lpdisp;
	
	//创建 Excel 服务器(启动Excel) 	
	if (!ExcelApp.CreateDispatch(_T("Excel.Application"),NULL)) 
	{ 
		AfxMessageBox(_T("create Excel server fail!")); 
		return FALSE; 
	} 
	
	COleVariant covOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR); 
	COleVariant covFalse((short)FALSE);
	
	wbsWorkbooks.AttachDispatch(ExcelApp.GetWorkbooks());
	
	lpdisp=wbsWorkbooks.Open(pszFileName, //初始化. 
		covOpt,covOpt,covOpt,covOpt,covOpt,covOpt,covOpt,covOpt,covOpt,covOpt,covOpt,covOpt,covOpt,covOpt); 
    wbWorkbook.AttachDispatch(lpdisp);
	wssWorksheets.AttachDispatch(wbWorkbook.GetWorksheets(),true); 	
	wsWorksheet.AttachDispatch(wssWorksheets.GetItem(_variant_t("Sheet1"))); 	
	

	
	Range rgUsedRange;
	rgUsedRange.AttachDispatch(wsWorksheet.GetUsedRange()); 

	VARIANT ret;
	//ret = rgUsedRange.GetValue2();
	ret = rgUsedRange.GetValue(covOpt);
	COleSafeArray sa(ret);
	long lNumRows;
	long lNumCols;

	sa.GetUBound(1,&lNumRows);
	sa.GetUBound(2,&lNumCols);
    long index[2];
    VARIANT var;

	CStringArray aRow;
	CString strID = _T("");
	CString strCell;

	int i,j;

	///检测列数和列名
	if(lNumCols == 0)
	{
		AfxMessageBox(_T("Sheet1 doesn't exist or is empty!"));
		wbWorkbook.Close(covFalse,COleVariant(pszFileName),covOpt); 
		wbsWorkbooks.Close(); 
		ExcelApp.Quit(); 
		return FALSE;
	}	
	if(nListColCount > lNumCols)
	{
		AfxMessageBox(_T("The number of Sheet1's columns must be\nequal to the mumber of List's columns!"));
		wbWorkbook.Close(covFalse,COleVariant(pszFileName),covOpt); 
		wbsWorkbooks.Close(); 
		ExcelApp.Quit(); 
		return FALSE;
	}
	//检测列名
	
	_TCHAR szField[256];
	HDITEM hdItem;
	hdItem.mask = HDI_TEXT;
	hdItem.pszText = szField;
	hdItem.cchTextMax = 256;
	for(i = 0; i < lNumCols; i++)
	{
		lst.GetHeaderCtrl()->GetItem(i,&hdItem);
		CString strField(szField);
		index[0]=1;
		index[1]=i+1;
		sa.GetElement(index,&var);
		strCell= VariantToCString(var);
		
		if(strField.CompareNoCase(strCell)!=0)
		{			
			AfxMessageBox(_T("The names of Sheet1's columns must\nmatch with the names of the List's columns!"));
			wbWorkbook.Close(covFalse,COleVariant(pszFileName),covOpt); 
			wbsWorkbooks.Close(); 
			ExcelApp.Quit(); 
			return FALSE;
		}
	}
	///检测结束	
	CStringArray arrLine;
    //从Excel第二行读
	for(i = 2;i<=lNumRows;i++)
	{
		aRow.RemoveAll();
		
		//read first col
		index[0]=i;
		index[1]=1;
		sa.GetElement(index,&var);
		strCell= VariantToCString(var);
		//ID
		strID = strCell;
        if(strID.IsEmpty())
			continue;
		else
			lst.InsertItem( nListRowCount+i-2, strID );
		
		for(j=2;j<=lNumCols;j++)
		{			
			index[0]=i;
			index[1]=j;
			sa.GetElement(index,&var);
			strCell= VariantToCString(var);
			aRow.Add(strCell);
			lst.SetItemText(nListRowCount+i-2,j-1,strCell);
		}	

		if( mmires.AddTextEx( strID, aRow ) )			
		{			
			CDirFileNode * pRoot  = (CDirFileNode *)m_pInfo->GetRoot();
			CDirFileNode * pChild = (CDirFileNode *)m_pInfo->MallocNode();
			if( NULL == pChild )
			{
				wbWorkbook.Close(covFalse,COleVariant(pszFileName),covOpt); 
				wbsWorkbooks.Close(); 
				ExcelApp.Quit(); 
				return FALSE;
			}
			
			_tcscpy( pChild->szID, strID );
			m_pInfo->AddChild( pRoot, pChild );
			
			lst.SetItemData(nListRowCount+i-2, (DWORD)pChild);
			if(g_theApp.m_nPrecomposed != 0)
			{
				mmires.GetTextEx(strID,arrLine);
				for(int k = 1; k<lNumCols;k++)
				{
					lst.SetItemText(i,k,arrLine.GetAt(k-1));
				}
			}
		}
		else
		{
			lst.DeleteItem(nListRowCount+i-2);
			wbWorkbook.Close(covFalse,COleVariant(pszFileName),covOpt); 
			wbsWorkbooks.Close(); 
			ExcelApp.Quit(); 
			return FALSE;
		}
	}
/*	for(i = 0;i<nExcelRowCount;i++)
	{
		aRow.RemoveAll();
		for(j=0;j<nListColCount;j++)
		{
			//从Excel第二行读
			varCell = rgRang.GetItem(COleVariant(long(i+2)),COleVariant(long(j+1)));
			strCell= (LPCTSTR)(_bstr_t)varCell;
			if(j==0)
				strID = strCell;
			else
				aRow.Add(strCell);
		}

		if(strID.IsEmpty())
			continue;

		if( mmires.AddTextEx( strID, aRow ) )			
		{
			lst.InsertItem( nListRowCount+i, strID );
			
			for( k = 1; k < nListColCount; k++) 
			{
				lst.SetItemText(nListRowCount+i,k,aRow.GetAt(k-1));
			}
			
			CDirFileNode * pRoot  = (CDirFileNode *)m_pInfo->GetRoot();
			CDirFileNode * pChild = (CDirFileNode *)m_pInfo->MallocNode();
			if( NULL == pChild )
			{
				wbWorkbook.Close(covFalse,COleVariant(pszFileName),covOpt); 
				wbsWorkbooks.Close(); 
				ExcelApp.Quit(); 
				return FALSE;
			}
			
			_tcscpy( pChild->szID, strID );
			m_pInfo->AddChild( pRoot, pChild );
			
			lst.SetItemData(nListRowCount+i, (DWORD)pChild);
		}
	}		
*/	
	wbWorkbook.Close(covFalse,COleVariant(pszFileName),covOpt); 
	wbsWorkbooks.Close(); 
	ExcelApp.Quit(); 
///////////////////////////////////////////////////////

	return TRUE;
}

BOOL CTextView::ExportTxtToExcel( LPCTSTR pszFileName )
{  
	_ASSERTE( pszFileName != NULL );

    CListCtrl &lst = GetListCtrl();

	int nTotalCol = lst.GetHeaderCtrl()->GetItemCount();
	int nTotalRow = lst.GetItemCount();

    if( nTotalCol == 0 || nTotalRow == 0)
        return TRUE;

	_Application	ExcelApp; 
	Workbooks		wbsWorkbooks; 
	_Workbook		wbWorkbook; 
	Worksheets		wssWorksheets; 
	_Worksheet		wsWorksheet; 
	Range			rgRang; 
	COleVariant		covOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR); 
	COleVariant		covTrue((short)TRUE);
	COleVariant		covFalse((short)FALSE);
	
	//创建 Excel 服务器(启动Excel) 	
	if (!ExcelApp.CreateDispatch(_T("Excel.Application"),NULL)) 
	{ 
		AfxMessageBox(_T("create Excel server fail!"));
		return FALSE; 
	} 
	wbsWorkbooks.AttachDispatch(ExcelApp.GetWorkbooks());
	wbWorkbook.AttachDispatch(wbsWorkbooks.Add(covOpt));
	wssWorksheets.AttachDispatch(wbWorkbook.GetWorksheets()); 
	wsWorksheet.AttachDispatch(wssWorksheets.GetItem(_variant_t("Sheet1"))); 
	rgRang.AttachDispatch(wsWorksheet.GetCells()); 	
	
	_TCHAR szField[256];
	HDITEM hdItem;
	hdItem.mask = HDI_TEXT;
	hdItem.pszText = szField;
	hdItem.cchTextMax = 256;
	int i,j;
	
	for(i = 0; i < nTotalCol; i++)
	{
		lst.GetHeaderCtrl()->GetItem(i,&hdItem);
		CString strField(szField);
		rgRang.SetItem(COleVariant(long(1)),COleVariant(long(i+1)),COleVariant(strField));
	}
	CString strCell;
	for(i = 0;i<nTotalRow;i++)
	{
		for(j=0;j<nTotalCol;j++)
		{
			strCell = lst.GetItemText(i,j);
			rgRang.SetItem(COleVariant(long(i+2)),COleVariant(long(j+1)),COleVariant(strCell));
		}
	}
	

	wbWorkbook.SaveCopyAs(COleVariant(pszFileName)); 
	wbWorkbook.Close(covFalse,covOpt,covOpt); 
	wbsWorkbooks.Close(); 
	ExcelApp.Quit(); 
	
	return TRUE;
}

void CTextView::OnTextExportToExcel() 
{
	// TODO: Add your command handler code here
    CFileDialog dlg(FALSE,
		_T(".xls"),
		_T("TEXT"),
		OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
		_T("Excel files (*.xls)|*.xls|"));
    if(dlg.DoModal() == IDCANCEL)
		return;

    CString strFileName = dlg.GetPathName();
    if( strFileName.IsEmpty() )
        return;

    int nChar = strFileName.ReverseFind('\\');
	CString strName = strFileName.Right(strFileName.GetLength()-nChar-1);
	CString str;
  
	str.Format(_T("Microsoft Excel - %s"),strName);

	HWND hWnd = ::FindWindow(NULL,str);
	if(hWnd)
	{
		str.Format(_T("\"%s\" is open,\nplease close it first!"),strName);
		AfxMessageBox(str);
		return;
	}
	

    CWaitCursor waitCur;
   	if (CoInitialize(NULL)!=0) 
	{ 
		AfxMessageBox(_T("initialize COM fail!")); 
		return; 
	}  

	if(ExportTxtToExcel(strFileName))
		AfxMessageBox(IDS_EXPORT_COMPLETE);	
    
	CoUninitialize();
}

void CTextView::OnTextImportFormExcel() 
{
	// TODO: Add your command handler code here
    CFileDialog dlg(TRUE,
		_T(".xls"),
		_T("TEXT"),
		OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_FILEMUSTEXIST,
		_T("Excel files (*.xls)|*.xls|"));
    if(dlg.DoModal() == IDCANCEL)
		return;

    CString strFileName = dlg.GetPathName();
    if( strFileName.IsEmpty() )
        return;
    CFileFind ff;
	if(ff.FindFile(_T("TEMP.xls")))
		::DeleteFile(_T("TEMP.xls"));

    CListCtrl &lst = GetListCtrl();
    int nListRowCount = lst.GetItemCount();
	if(nListRowCount != 0)
	{
		CWaitCursor waitCur;
		if( AfxMessageBox(_T("Before importing,\nit will delete all items first,\nare you sure?"), MB_YESNO) == IDNO )
			return;
        CListCtrl &lst = GetListCtrl();
		CWaitCursor waitCursor;
		CDirFileNode * pNode  = NULL;
		CString        strID;
		for( int n = 0; n < nListRowCount; ++n )
		{
			strID = lst.GetItemText(n, 0);
			g_theApp.m_MMIRes.DeleteTextEx(strID);
			pNode = (CDirFileNode *)lst.GetItemData(n);
			m_pInfo->RemoveNode(pNode);
		}  
		lst.DeleteAllItems();
	}


    CWaitCursor waitCur;
	if (CoInitialize(NULL)!=0) 
	{ 
		AfxMessageBox(_T("initialize COM fail!")); 
		return; 
	} 

	if(ImportTxtFromExcel(strFileName))	
		AfxMessageBox(IDS_IMPORT_COMPLETE);	
	else
		AfxMessageBox(_T("Import Failed!"));
    SetModifiedFlag();
	CoUninitialize();
}

void CTextView::OnUpdateTextImportFormExcel(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	
}

void CTextView::OnUpdateTextExportToExcel(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	CListCtrl &ls = GetListCtrl();
	pCmdUI->Enable( ls.GetSelectedCount() > 0 );	
}

void CTextView::OnUpdateTextDelAllItem(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	CListCtrl &ls = GetListCtrl();    
    pCmdUI->Enable( ls.GetItemCount() > 0 );	
}

void CTextView::OnUpdateTextFindItem(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	CListCtrl &ls = GetListCtrl();    
    pCmdUI->Enable( ls.GetItemCount() > 0 );	
}

CString CTextView::VariantToCString(VARIANT var)
{
	CString strValue;
	time_t cur_time;
	CTime time_value;
	COleCurrency var_currency;
	switch(var.vt)
	{
	case VT_EMPTY:
		strValue=_T("");
		break;
	case VT_UI1:
		strValue.Format(_T("%d"),var.bVal);
		break;
	case VT_I2:
		strValue.Format(_T("%d"),var.iVal);
		break;
	case VT_I4:
		strValue.Format(_T("%d"),var.lVal);
		break;
	case VT_R4:
		strValue.Format(_T("%f"),var.fltVal);
		break;
	case VT_R8:
		strValue.Format(_T("%f"),var.dblVal);
		break;
	case VT_CY:
		var_currency=var;
		strValue=var_currency.Format(0);
		break;
	case VT_BSTR:
		strValue.Format (_T("%s"),(CString)var.bstrVal);
		break;
	case VT_NULL:
		strValue=_T("");
		break;
	case VT_DATE:
		cur_time = (long)var.date;
		time_value=cur_time;
		strValue=time_value.Format(_T("%A,%B%d,%Y"));
		break;
	case VT_BOOL:
		strValue.Format(_T("%d"),var.boolVal );
		break;
	default: 
		strValue=_T("");
		break;
	}
	return strValue;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -