代碼就是下面這樣的,百度的都差不多,但是沒有人提到這個問題。每次讀完xls檔案都變成空檔案 提示“您嘗試打開的檔案格式與檔案擴展名指定的格式不一致。”
HRESULT hr; //HRESULT函式回傳值
hr = CoInitialize(NULL); //CoInitialize用來告訴 Windows以單執行緒的方式創建com物件
if (FAILED(hr))
{
AfxMessageBox(_T("Failed to call Coinitialize()"));
}
CFileDialog filedlg(TRUE, L"*.xls", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, L"Xls檔案 (*.xls)|*.xls");
filedlg.m_ofn.lpstrTitle = L"打開檔案";
CString strFilePath;
if (IDOK == filedlg.DoModal())
{
strFilePath = filedlg.GetPathName();
}
else
{
return;
}
CApplication app1;
CWorkbooks books;
CWorkbook book;
CWorksheets sheets;
CWorksheet sheet;
CRange range;
CRange iCell;
LPDISPATCH lpDisp;
COleVariant vResult; //COleVariant類是對VARIANT結構的封裝
GetDlgItem(IDC_READ)->EnableWindow(FALSE);
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
if (!app1.CreateDispatch(_T("Excel.Application"), NULL))
{
AfxMessageBox(_T("無法啟動Excel服務器!"));
return;
}
books.AttachDispatch(app1.get_Workbooks());
lpDisp = books.Open(strFilePath, covOptional, covOptional,
covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional);
//得到Workbook
book.AttachDispatch(lpDisp);
//得到Worksheets
sheets.AttachDispatch(book.get_Worksheets());
//sheet = sheets.get_Item(COleVariant((short)1));
//得到當前活躍sheet
//如果有單元格正處于編輯狀態中,此操作不能回傳,會一直等待
lpDisp = book.get_ActiveSheet();
sheet.AttachDispatch(lpDisp);
//讀取第一個單元格的值
range.AttachDispatch(sheet.get_Cells());
range.AttachDispatch(range.get_Item(COleVariant((long)2), COleVariant((long)1)).pdispVal); //第一變數是行,第二個變數是列,即第二行第一列
vResult = range.get_Value2();
CString str;
if (vResult.vt == VT_BSTR) //字串
{
str = vResult.bstrVal;
}
else if (vResult.vt == VT_R8) //8位元組的數字
{
str.Format(_T("%f"), vResult.dblVal);
}
// app1.put_Visible(TRUE);
//app1.put_UserControl(TRUE);
books.Close();
app1.Quit();
//釋放物件
range.ReleaseDispatch();
sheet.ReleaseDispatch();
sheets.ReleaseDispatch();
book.ReleaseDispatch();
books.ReleaseDispatch();
app1.ReleaseDispatch();
//OnOK();
MessageBox(str);
uj5u.com熱心網友回復:
分享我用過的類,功能很全鏈接:https://pan.baidu.com/s/1VvK-9qQkQqBrshGtfZ4Pew
提取碼:lgpl
uj5u.com熱心網友回復:
我試了沒問題,你的代碼稍微改了下:
CFileDialog filedlg(TRUE, L"*.xlsx", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, L"Xls file (*.xlsx)|*.xlsx");
其實最好是:
CFileDialog dlg(
TRUE,
_T(".xlsx"),
NULL,
OFN_HIDEREADONLY | OFN_FILEMUSTEXIST,
_T("xlsx files (*.xlsx)|*.xlsx|All Files (*.*)|*.*||")
);
uj5u.com熱心網友回復:
啊哦,你來晚了,分享的檔案已經被洗掉了,下次要早點喲。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/48577.html
標籤:基礎類
上一篇:vc++網路編程有哪些方法
