機能:
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("数据保存成功!"));
上記は、データを保存することができた後、[保存]ボタンをクリックし、完了です。あなたは自分のニーズに応じて適切な変更を行うことができます。
次のような効果を保存した後: