当前位置:首页 > 科技

【vc怎么显示excel】Vc操作excel实现指定区域拦截jpg图片生成7-使用剪贴板实现

继前面写的文章后,继续写程序。

以这种方式实施时,需要使用GDIPlus开源库实现照片转换功能。因此,必须在VC开发环境中设置库路径。

GDIPlus下载地址:

下载完成后,只需解压缩到本地计算机的路径下即可

然后,从vc6.0导入GDIPlus开放源代码库

选择Vc6.0菜单栏“tool”-“options”,在弹出对话框中找到“Directories”选项卡,然后从“Show Directories for:”下拉框选项中选择“Include files”。

列表中出现空行。空行后面的“.”单击按钮导航到解压的GDIPlus文件夹中的“Include”文件夹,选择该文件夹,然后双击该文件夹完成添加“Include”文件夹。

切换“Show Directories for:”下拉框选项,选择“Library files”选项,在GDIPlus文件夹中找到Lib文件夹,然后双击以添加该文件夹。

选择Vc6.0菜单栏Project“-”Setting,在弹出对话框界面中找到Link选项卡,然后在Object/library modules:输入框中输入gdiplus。输入

打开“文件视图”视图,双击s文件将其打开,然后添加以下代码:

打开FileView视图,双击excelDemo1.h文件将其打开,然后添加以下代码:

打开FileView视图,双击ExcelDemo1.cpp文件将其打开,然后添加以下代码:

完成上述操作后,如果按键盘“F7”快捷键编译程序,您会发现Excel中的类型名称与GDIPlus中的类型名称冲突,并通过以下解决方法在编译时报告大量错误:

1.在“文件视图”视图中,双击《excel.h》文件将其打开,然后将代码添加到文件开头。

2、拖动滑块以设置文件末尾,并在文件末尾添加}符号。

c-image/2437dce9ba62494998089e0e87256b23?from=article.detail&_iz=31825&index=8" width="507" height="126"/>

3、在“FileView”视图中双击《excel.cpp》文件打开,在文件中添加如下代码:

4、拖动滑块置文件的末尾处,在文件的末尾添加}符号:

5、在“FileView”视图中双击《XExcel.h》文件打开,在文件中添加如下代码:

完成上述步骤之后,重新点击键盘快捷键“F7”重新编译程序,类型名冲突的报错信息将会消失。

打开“FileView”视图,双击打开ExcelDemo1Dlg.h 文件,在文件中导入XExcel.h头文件,如下所示:

打开“ResourceView”视图,找到IDD_EXCELDEMO1_DIALOG对话框,双击打开该对话框,效果图如下所示:

双击对话框中的“确定”按钮,为“确定”按钮增加响应函数。操作完成后进入“确定”按钮实现函数处进行代码的编辑工作。

在这里我们首先为CExcelDemo1Dlg类添加一个成员函数,作为生成JPG图片方法的实现。

打开“FileView”视图,双击打开ExcelDemo1Dlg.h 文件,在类中添加

成员函数:

int SaveFile(Bitmap* pImage, const wchar_t* pFileName);

int SelectDirPath(CString& strDirPath);

int CreateJPGFile(const CString& strFilepath);

int CreateJPGByCliopBoard();

int bmpToJpg(const unsigned short* szBmpPath, const unsigned short* szJPGPath);

int GetEncoderClsid(const WCHAR* Format, CLSID* pClsid);

成员变量:

CString m_strSaveJPGDirPath;


打开“FileView”视图,双击打开ExcelDemo1Dlg.cpp 文件,实现成员函数的功能:

int CExcelDemo1Dlg::SaveFile(Bitmap* pImage, const wchar_t* pFileName) { EncoderParameters encoderParameters; CLSID jpgClsid; int nRet = GetEncoderClsid(L"image/jpeg", &jpgClsid); if (nRet < 0) { return -1; } encoderParame = 1; encoderParame[0].Guid = Encoderquality; encoderParame[0].Type = EncoderParameterValueTypeLong; encoderParame[0].NumberOfValues = 1; ULONG quality; quality = 100; encoderParame[0].Value = &quality; Status status = pImage->Save(pFileName, &jpgClsid, &encoderParameters); if (status != Ok) { return -1; } return 0; }int CExcelDemo1Dlg::SelectDirPath(CString& strDirPath) { CWnd* pMainCWnd = NULL; pMainCWnd = GetActiveWindow(); HWND hWnd = pMainCWnd->GetSafeHwnd(); (); LPMALLOC lpMalloc; if (::SHGetMalloc(&lpMalloc) != NOERROR) return 0; char szDisplayName[_MAX_PATH]; char szBuffer[_MAX_PATH]; BROWSEINFO browseInfo; brow = hWnd; brow = NULL; brow = szDisplayName; brow = "选择一个文件夹"; brow = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT; brow = NULL; brow = 0; LPITEMIDLIST lpItemIDList; if ((lpItemIDList = ::SHBrowseForFolder(&browseInfo)) != NULL) { if (::SHGetPathFromIDList(lpItemIDList, szBuffer)) { if (szBuffer[0] == '\0') return 0; strDirPath = szBuffer; return 1; } else return 1; lpMalloc->free(lpItemIDList); lpMalloc->Release(); } return 1; }int CExcelDemo1Dlg::CreateJPGFile(const CString& strFilepath) { CString strExcelPath = ""; CString strDirPath = ""; CString strSavePath = ""; CString strFileName = ""; int nPos = ("."); if (nPos > 0) { strFileName = (0, nPos); } ("%s%s", m_strSaveJPGDirPath, strFileName); m_ed(strDirPath); ("%s%s", strDirPath, strFilepath); CXExcel xExcel; i()<0) return -1; int nRet = xExcel.Open(strExcelPath); if (nRet < 0) { CString strMsg = ""; ("打开文件失败:%s", strExcelPath); AfxMessageBox(strMsg); xExcel.ExitApp(); } CString strBeginArea = "", strEndArea = ""; m_ed(strBeginArea); m_ed(strEndArea); if () || ()) { AfxMessageBox("请录入完整的截图区域!"); xExcel.ExitApp(); return -1; } BOOL bRet = xExcel.SaveExcelCellToPic(strBeginArea, strEndArea, strSavePath + ".bmp"); if (!bRet) { AfxMessageBox("生成图片失败!"); xExcel.ExitApp(); return -1; } unsigned short szBmpPath[MAX_PATH] = {0}; unsigned short szJpgPath[MAX_PATH] = {0}; MultiByteToWideChar(CP_ACP, 0, strSavePath + ".bmp", -1, szBmpPath, MAX_PATH); MultiByteToWideChar(CP_ACP, 0, strSavePath + ".jpg", -1, szJpgPath, MAX_PATH); nRet = BmpToJpg(szBmpPath, szJpgPath); if (nRet == 0) { ::DeleteFile(strSavePath + ".bmp"); } else { AfxMessageBox("图片转化失败!"); xExcel.ExitApp(); return -1; } xExcel.ExitApp(); return 0; }int CExcelDemo1Dlg::CreateJPGByCliopBoard() { WIN32_FIND_DATA FindFileData; HANDLE hFindFile; CString strPath; m_ed(strPath); i()==0) return -1; CString strPathEx = strPath; CString strFileName = "";//文件名 CString strFile = ""; i(1)!="\\") strPathEx = strPath+ "\\"; strFile= strPathEx + "*.*"; ('\\', '/'); hFindFile = FindFirstFile(strFile, &FindFileData); if(hFindFile!=INVALID_HANDLE_VALUE) { do { if & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) { continue; } strFileName = FindFileDa; if (strcm(4), ".xls") == 0 || strcm(5), ".xlsx") == 0) { CreateJPGFile(strFileName); } } while(FindNextFile(hFindFile, &FindFileData)); } FindClose(hFindFile); return 0; }int CExcelDemo1Dlg::BmpToJpg(const unsigned short* szBmpPath, const unsigned short* szJPGPath) { int nRet = 0; Bitmap newbitmap(szBmpPath); nRet = SaveFile(&newbitmap,szJPGPath); return nRet; }int CExcelDemo1Dlg::GetEncoderClsid(const WCHAR* format, CLSID* pClsid) { UINT num = 0; UINT size = 0; ImageCodecInfo* pImageCodecInfo = NULL; GetImageEncodersSize(&num, &size); if(size == 0) return -1; pImageCodecInfo = (ImageCodecInfo*)(malloc(size)); if(pImageCodecInfo == NULL) return -1; GetImageEncoders(num, size, pImageCodecInfo); for(UINT j = 0; j < num; ++j) { if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 ) { *pClsid = pImageCodecInfo[j].Clsid; free(pImageCodecInfo); return j; } } free(pImageCodecInfo); return -1; }

问题:

1、在程序编译完成后执行程序,会存在报错“Excel服务器出现异常”,具体原因暂时还不知道,我使用的Excel是2013版本的;

2、使用此种方式会在Excel07中出现截取不到图片的情况,2013版本的正常。原因是在剪贴板中取不到数据。

备注:

1、项目完整代码会整理完成后添加链接,链接地址会在本次Demo完结章节中给出。

2、本人所有文章皆为本人个人工作中遇到的问题进行汇总的学习笔记,如存在侵权行为,请及时联系删除。

1.《【vc怎么显示excel】Vc操作excel实现指定区域拦截jpg图片生成7-使用剪贴板实现》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《【vc怎么显示excel】Vc操作excel实现指定区域拦截jpg图片生成7-使用剪贴板实现》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/2516562.html

上一篇

【excel怎么计算税收】泄漏?税金?学习这个excel公式,不要入坑,守法的:货物播音员。

【vc怎么显示excel】Excel作业Excel实现拦截指定区域生成jpg图2-导入系统Excel组件库

  • 【vc怎么显示excel】Excel作业Excel实现拦截指定区域生成jpg图2-导入系统Excel组件库
  • 【vc怎么显示excel】Excel作业Excel实现拦截指定区域生成jpg图2-导入系统Excel组件库
  • 【vc怎么显示excel】Excel作业Excel实现拦截指定区域生成jpg图2-导入系统Excel组件库
【vc怎么显示excel】阅读C# Excel方法摘要

【vc怎么显示excel】阅读C# Excel方法摘要

vc怎么显示excel相关介绍,网站防火墙 网站防火墙 您的请求带有不合法参数,已被网站管理员设置拦截! 可能原因:您提交的内容包含危险的攻击请求 如何解决: 1)检查提交内容; 2)如网站托管,请联系空间提供商; 3)普通网站访客...

【vc怎么显示excel】使用C#显示Excel和操作绘图

【vc怎么显示excel】使用C#显示Excel和操作绘图

vc怎么显示excel相关介绍,C#是。基于Net平台的高级编程软件,语法类似于VB和C,界面友好,可视化也非常好。这里我要介绍一个用C#操作Excel的小软件。 启动VS2019并创建新的C#窗口应用程序。将复合框comboBox...

【vc怎么显示excel】excel与VC通信,以确定阵列中的相同数量。

  • 【vc怎么显示excel】excel与VC通信,以确定阵列中的相同数量。
  • 【vc怎么显示excel】excel与VC通信,以确定阵列中的相同数量。
  • 【vc怎么显示excel】excel与VC通信,以确定阵列中的相同数量。
【vc怎么显示excel】Spire。XLS教程:在c中隐藏或显示Excel注释

【vc怎么显示excel】Spire。XLS教程:在c中隐藏或显示Excel注释

vc怎么显示excel相关介绍,在某些情况下,您可能需要在Excel文档中显示或隐藏注释。本文档介绍如何使用S在Excel文档中隐藏或显示现有注释。 详细步骤: Step 1:实例化Workbook实例并加载excel文档 Work...