VS2010 MFCは、Excelに編集コントロールデータの複数の実行を保存します

機能:
MFCダイアログベースのプロジェクトでは、エディットコントロールはExcelで保存された複数の実行中のデータを表示します。

次のように詳細な手順は以下のとおりです。
内蔵され、ダイアログベースのMFCプロジェクトにおいては、クラスウィザードを開く> [クラスの追加の右側にある下向き矢印をクリック>を選択MFCクラスライブラリタイプ
ここに画像を挿入説明
2.ファイルを選択してください>マイクロソフトオフィスのパスにインストールされたコンピュータを選択しますEXCEL.EXE>は、下図にいくつかのファイルを追加します。
ここに画像を挿入説明
前記
アプリケーション:アプリケーション自体の代わりに。そのアプリケーションエクセル
ワークブック:薄いワーキングセット
ワークブック:ワークブック、サブオブジェクトワークブック
ワークシート:、子オブジェクトは、ワークブックのワークシートの(シート)の集まりです
ワークシート:ワークシートは、ワークシートの子オブジェクトであります

3.添加が完了した後、以下に示すように、各クラスのヘッダファイルに対応する文はコメント
ここに画像を挿入説明
3.エクセルのファイルヘッダファイルDlg.cpp操作に以下を追加します。
ここに画像を挿入説明
プロジェクト内の4 BOOLの.cppファイルCSaveExcelTestApp :: InitInstance関数()関数で、INT_PTR nResponse = dlg.DoModal();ステートメントの前に次のステートメントを追加します。

if (CoInitialize(NULL)!=0) 
	{ 
		AfxMessageBox(_T("初始化COM支持库失败!")); 
		exit(1); 
	} 

コンパイラ次のようにアラームが表示されたら
ここに画像を挿入説明
ソリューション:
CRangeクラスでは、ダイアログボックスは、()上記に加えた)(_DialogBoxを強調しています。
ここに画像を挿入説明

前記複数の実行中にデータを格納するためのCString配列SaveExcelTestDlg.hヘッダファイルの種類を定義します。

CString InsData[100];
int n ;

データをダンプ以下の通りでした

UpdateData(true);
	InsData[n] = m_Edit1_Data;
	if(n==100)
	{
		n = 0;
	}
	else 
		n++;

m_Edit1_Data編集コントロールは、値のCStringメンバ変数のタイプです。

6. [保存]ボタンの中にダイアログボックスを作成し、ボイドCSaveExcelTestDlg :: OnBnClickedButton1()関数にダブルクリックし、次の手順を追加します。

	CWorkbooks    books;
	CWorkbook     book;
	CApplication  	app;
	CWorksheets   sheets;
	CWorksheet    sheet;
	CRange        range;
	CRange		  cols;
 
	COleVariant   vResult;
	COleVariant   covOptional((long) DISP_E_PARAMNOTFOUND,VT_ERROR);

	CTime tm = CTime::GetCurrentTime();  
	CString str,str1,str2;  
	CString Range[]={_T("A"),_T("B"),_T("C"),_T("D"),_T("E"),_T("F")};
	CString title[]={_T("NO."),_T("数据1"),_T("数据2"),_T("数据3"),_T("数据4"),_T("数据5")};
	int i = 0;
	
	if (!app.CreateDispatch(_T("Excel.Application")))
	{
		AfxMessageBox(_T("无法启动服务器"));
		return ;
	}
 
	books.AttachDispatch(app.get_Workbooks()); 
 
	//得到Workbook  
	book.AttachDispatch(books.Add(covOptional),true);  
 
	//得到Worksheets  
	sheets.AttachDispatch(book.get_Worksheets(),true);  
	
	sheet.AttachDispatch(sheets.get_Item(_variant_t("sheet1")),true); 

	
	for(int j=0;j<6;j++)
	{
		str.Format(_T("%s%d"),Range[j],1);
		range=sheet.get_Range(COleVariant(str),COleVariant(str));
		range.put_Value2(COleVariant(title[j]));
		cols = range.get_EntireColumn();//选择整列,并设置宽度为自适应
		cols.AutoFit();
	}
	

	for(int k=0;k<(n/5);k++)
	{
		for(int j=1;j<6;j++)
		{
			str.Format(_T("%s%d"),Range[0],k+2);
			str2.Format(_T("%d"),k+1);
			range=sheet.get_Range(COleVariant(str),COleVariant(str));
			range.put_Value2(COleVariant(str2));

			str.Format(_T("%s%d"),Range[j],k+2);
			range=sheet.get_Range(COleVariant(str),COleVariant(str));
			range.put_Value2(COleVariant(InsData[i]));
			if(i==n)
			{
				i = 0;
			}
			i++;
		}

	}
	

	//range=sheet.get_Range(COleVariant(_T("A")+ (str.Format("%d",i))),COleVariant(_T("A1")));
	//range.put_Value2(COleVariant(str3[i]));
	
	//app.put_Visible(TRUE);  
	str1.Format(_T("e:\\%d%d%d%-d%d%d_InsData.xlsx"),tm.GetYear(),tm.GetMonth(),tm.GetDay(),tm.GetHour(),tm.GetMinute(),tm.GetSecond());  
	book.SaveCopyAs(COleVariant(str1)); //按保存时间命名保存数据文件,地址在E盘
	book.put_Saved(TRUE);
 
	
	books.Close();
	app.Quit();
	range.ReleaseDispatch();
	sheet.ReleaseDispatch();
	sheets.ReleaseDispatch();
	book.ReleaseDispatch();
	books.ReleaseDispatch();
	app.ReleaseDispatch();
	AfxMessageBox(_T("数据保存成功!"));

上記は、データを保存することができた後、[保存]ボタンをクリックし、完了です。あなたは自分のニーズに応じて適切な変更を行うことができます。
次のような効果を保存した後:
ここに画像を挿入説明

おすすめ

転載: blog.csdn.net/madao1234/article/details/90208080