code_junkie

How to open existing file using COM/ATL (no MFC)

Nov 11th, 2011
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.44 KB | None | 0 0
  1. #include <windows.h>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. #import "C:\Program Files\Common Files\Microsoft Shared\OFFICE11\MSO.DLL"
  7. rename("RGB", "MSORGB")
  8. rename("DocumentProperties", "MSDocumentProperties")
  9.  
  10. using namespace Office;
  11.  
  12. #import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB"
  13.  
  14. using namespace VBIDE;
  15.  
  16. #import "C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE"
  17. rename("DialogBox", "ExcelDialogBox" )
  18. rename("RGB", "ExcelRGB")
  19. rename("CopyFile", "ExcelCopyFile")
  20. rename("ReplaceText", "ExcelReplaceText")
  21.  
  22. void DumpCOMError(_com_error& e) {
  23. wcout << L"Error:" << endl;
  24. wcout << L" Code = " << hex << e.Error() << endl;
  25. wcout << L" Code meaning = " << e.ErrorMessage() << endl;
  26. _bstr_t bstrSource(e.Source());
  27. _bstr_t bstrDescription(e.Description());
  28. wcout << L" Source = " << bstrSource << endl;
  29. wcout << L" Description = " << bstrDescription << endl;
  30. }
  31.  
  32. HRESULT IsXlsFileOpen(LPWSTR FileName, BOOL& file_open) {
  33. Excel::_ApplicationPtr pApplication;
  34. HRESULT hr = E_FAIL;
  35. if (FAILED(hr = pApplication.CreateInstance(L"Excel.Application"))) {
  36. file_open = FALSE;
  37. return hr;
  38. }
  39.  
  40. _variant_t varOption(static_cast<long>(DISP_E_PARAMNOTFOUND), VT_ERROR);
  41. Excel::_WorkbookPtr pBook;
  42.  
  43. try {
  44. pBook = pApplication->Workbooks->Open(
  45. FileName,
  46. varOption,
  47. varOption,
  48. varOption,
  49. varOption,
  50. varOption,
  51. varOption,
  52. varOption,
  53. varOption,
  54. varOption,
  55. varOption,
  56. varOption,
  57. varOption);
  58.  
  59. file_open = pBook->ReadOnly == VARIANT_TRUE;
  60. pBook->Close(VARIANT_FALSE);
  61.  
  62. hr = S_OK;
  63. } catch (_com_error& e) {
  64. file_open = FALSE;
  65. DumpCOMError(e);
  66. hr = e.Error();
  67. }
  68.  
  69. pApplication->Quit();
  70. return hr;
  71. }
  72.  
  73. int main(int argc, wchar_t* argv[])
  74. {
  75. CoInitialize(NULL);
  76. {
  77. BOOL fileOpen;
  78. HRESULT hr = IsXlsFileOpen(L"f:\temp\treta.xls", fileOpen);
  79. if (SUCCEEDED(hr)) {
  80. cout << "File is " << (fileOpen ? "open" : "not open") << "." << endl;
  81. }
  82. cout << "IsXlsFileOpen returned: 0x" << hex << hr << endl;
  83. }
  84. CoUninitialize();
  85.  
  86. return 0;
  87. }
Add Comment
Please, Sign In to add comment