在MFC下实现Excel的部分操作

//建立
void CExcel1Dlg::OnOK() 
{
	// TODO: Add extra validation here
    COleVariant
		covTrue((short)TRUE),
		covFalse((short)FALSE),
		covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
	
    _Application ExcelApp;//excel对象
    Workbooks wbsMyBooks;//工作簿集
    _Workbook wbMyBook;//工作簿
    Worksheets wssMysheets;//表单集
    _Worksheet wsMysheet;//表单
    Range rgMyRge;//
    Range rgMyRgeFormat;//
    LPDISPATCH lpDisp;//
	
    //创建Excel 2000服务器(启动Excel)
    if (!ExcelApp.CreateDispatch("Excel.Application",NULL))
    {
        AfxMessageBox("创建Excel服务失败!");
        exit(1);
    }
    ExcelApp.SetVisible(false);//是否打开
	
    wbsMyBooks.AttachDispatch(ExcelApp.GetWorkbooks(),true);//
	
    wbMyBook.AttachDispatch(wbsMyBooks.Add(covOptional));
    //得到Worksheets
    wssMysheets.AttachDispatch(wbMyBook.GetWorksheets(),true);
    //得到sheet1
    wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("sheet1")),true);
    //得到全部Cells,此时,rgMyRge是cells的集合
    rgMyRge.AttachDispatch(wsMysheet.GetCells(),true);
    //设置所有单元格为空
    rgMyRge.SetValue(_variant_t(""));
    CString str,str2;
    str = "****";
    rgMyRge.SetItem(_variant_t((long)1),_variant_t((long)2),_variant_t(str));
    str = "****";
    rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)1),_variant_t(str));
    str = "****";
    rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)2),_variant_t(str));
    str = "****";
    rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)3),_variant_t(str));
    str = "****";
    rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)4),_variant_t(str));
    str = "****";
    rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)5),_variant_t(str));
    str = "****";
    rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)6),_variant_t(str));
    str = "****";
    rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)7),_variant_t(str));
    str = "****";
    rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)8),_variant_t(str));
	
	//    rgMyRge.SetItem(_variant_t((long)3),_variant_t((long)8),_variant_t("12345678901234567890"));
	
	//    rgMyRge.SetNumberFormat(_variant_t("0.0"));
	
	
	//设置格式
    lpDisp = wsMysheet.GetRange(_variant_t("B3"),_variant_t("B105"));
    ASSERT(lpDisp);
    rgMyRgeFormat.AttachDispatch(lpDisp);
    rgMyRgeFormat.SetNumberFormat(_variant_t("0"));
	
	//设置字体
    Font ft;
    Interior it; //定义背景色变量
    //表头
    lpDisp = wsMysheet.GetRange(_variant_t("A1"),_variant_t("H1"));
    rgMyRgeFormat.AttachDispatch(lpDisp);
    ft.AttachDispatch(rgMyRgeFormat.GetFont());
    ft.SetSize(_variant_t((long)20));   //字大小
	
    lpDisp = wsMysheet.GetRange(_variant_t("A2"),_variant_t("H2"));
    rgMyRgeFormat.AttachDispatch(lpDisp);
    ft.AttachDispatch(rgMyRgeFormat.GetFont());
    ft.SetColorIndex(_variant_t((long)3));   //字颜色
    it.AttachDispatch(rgMyRgeFormat.GetInterior());
    it.SetColorIndex(_variant_t((long)19));     //背景色
	
	
    for(i=startrow; i<startrow+NumberofStudent; i++)
    {
        str.Format(_T("A%d"),i);
        str2.Format(_T("H%d"),i);
        if(i%2==0)
        {
            lpDisp = wsMysheet.GetRange(_variant_t(str),_variant_t(str2));
            rgMyRgeFormat.AttachDispatch(lpDisp);
            it.AttachDispatch(rgMyRgeFormat.GetInterior());
            it.SetColorIndex(_variant_t((long)34));     //背景色
        }
    }
	
    // 3:居中  2:左对齐  1:右对齐
    lpDisp = wsMysheet.GetRange(_variant_t("A1"),_variant_t("H2"));
    rgMyRge.AttachDispatch(lpDisp);
    rgMyRge.SetHorizontalAlignment(_variant_t((long)3));
	
	//合并单元格
    lpDisp = wsMysheet.GetRange(_variant_t("A1"),_variant_t("H1"));
    //ASSERT(lpDisp);
    rgMyRge.AttachDispatch(lpDisp);
    rgMyRge.Merge(_variant_t("0"));
	
    //设置宽度为自动适应
    //lpDisp = rgMyRge.GetEntireColumn();
    //rgMyRge.AttachDispatch(lpDisp);
    //rgMyRge.AutoFit();
	
    lpDisp = wsMysheet.GetRange(_variant_t("A1"),_variant_t("A1"));
    ASSERT(lpDisp);
    rgMyRge.AttachDispatch(lpDisp);
    lpDisp = rgMyRge.GetEntireRow();
    rgMyRge.AttachDispatch(lpDisp);
    //插入一行
	//rgMyRge.Insert(_variant_t((long)1));
	
    //打印预览
    //wbMyBook.PrintPreview(_variant_t(false));
    //释放对象
    ExcelApp.SetVisible(true);//打开表格
	
    rgMyRge.ReleaseDispatch();
    wsMysheet.ReleaseDispatch();
    wssMysheets.ReleaseDispatch();
    wbMyBook.ReleaseDispatch();
    wbsMyBooks.ReleaseDispatch();
    ExcelApp.ReleaseDispatch();
	CDialog::OnOK();
}
//通过窗口打开已有的表格
void CExcel1Dlg::OnOpen1() 
{
	_Application app;
    Workbooks books;
    _Workbook book;
	Worksheets sheets;
    _Worksheet sheet; 
	Range range;
    VARIANT ret; 
	COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
	CFileFind filefind;
	// TODO: Add your control notification handler code here
	CString FilePathName;
	CFileDialog dlg(TRUE, //TRUE为OPEN对话框,FALSE为SAVE AS对话框
        NULL,
        NULL,
        OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
        (LPCTSTR)_TEXT("Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||"),
        NULL);
    if(dlg.DoModal()==IDOK)
	{
            FilePathName=dlg.GetPathName(); //文件相对路径保存在了FilePathName里
		app.CreateDispatch("Excel.Application");//开启Excel服务
		if(!filefind.FindFile(FilePathName))
		{   
			AfxMessageBox( "没有找到模版文档,请其查找" );   
			return;
		}
		LPDISPATCH lpDisp;
		books=app.GetWorkbooks();
		lpDisp = books.Open(FilePathName,
			covOptional, covOptional, covOptional, covOptional,
			covOptional, covOptional, covOptional, covOptional,
			covOptional, covOptional, covOptional, covOptional
			);//打开表格
		//ExcelApp.SetVisible(false);//
		book.AttachDispatch(lpDisp);//
		sheets = book.GetWorksheets();
        sheet = sheets.GetItem(COleVariant((short)1)); 
		range = sheet.GetRange(COleVariant("A1"), COleVariant("C8"));
        ret = range.GetValue(); 
		COleSafeArray sa(ret);
		app.SetVisible(true);
		//app.Quit();  
		//m_ExlApp一定要释放,否则程序结束后还会有一个Excel进程驻留在内存中,而且程序重复运行的时候会出错   
        //app.ReleaseDispatch(); 
	}
}
如果有不对的地方欢迎大家指正,有的函数我也没有看懂。。。。。。。懂得请解释一下。。。。。。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用MFC实现Excel表格生成为PDF文档的功能。以下是一个简单的步骤: 1. 首先,您需要使用MFC中的CExcel类来读取和处理Excel文件。您可以使用CExcel类中的方法来打开和读取Excel文件中的数据。 2. 接下来,您可以使用MFC中的CPDF类来创建和编辑PDF文档。您可以使用CPDF类中的方法来添加文本、图像和表格等内容到PDF文档中。 3. 在处理Excel数据时,您可以使用MFC中的CString类来处理字符串。您可以使用CString类中的方法来处理Excel中的单元格数据,并将其添加到PDF文档中。 4. 最后,使用CPDF类中的方法将生成的PDF文档保存到指定的路径。 下面是一个简单的示例代码,演示了如何使用MFC实现Excel表格生成为PDF文档的功能: ```cpp #include "stdafx.h" #include "Excel.h" // CExcel类的头文件 #include "PDF.h" // CPDF类的头文件 void GeneratePDFFromExcel(const CString& excelFilePath, const CString& pdfFilePath) { // 打开Excel文件 CExcel excel; if (!excel.Open(excelFilePath)) { AfxMessageBox(_T("无法打开Excel文件")); return; } // 创建PDF文档 CPDF pdf; if (!pdf.Create(pdfFilePath)) { AfxMessageBox(_T("无法创建PDF文档")); return; } // 获取Excel表格的行数和列数 int rowCount = excel.GetRowCount(); int colCount = excel.GetColCount(); // 遍历Excel表格的每个单元格,并将其添加到PDF文档中 for (int row = 1; row <= rowCount; row++) { for (int col = 1; col <= colCount; col++) { // 读取Excel单元格数据 CString cellData = excel.GetCellData(row, col); // 将数据添加到PDF文档中 pdf.AddText(cellData); } } // 关闭Excel文件 excel.Close(); // 保存PDF文档 pdf.Save(); pdf.Close(); AfxMessageBox(_T("PDF文档已生成")); } ``` 您可以根据您的实际需求进行修改和扩展此示例代码。希望对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值