range.AttachDispatch(sheet.get_UsedRange());
long iSheetCount = sheets.get_Count();
range = range.get_Rows();
long iRow = range.get_Row();
//long iRow = range.get_Count();
range = range.get_Columns();
//long iColumn = range.get_Column();
long iColumn = range.get_Count();
獲取EXCEL的表格當前行和列的值有問題
獲取行
range = range.get_Rows();
long iRow = range.get_Row();
long iRow = range.get_Count();
在表格無資料,兩個獲取都是 1 不會獲取到0, 有多少行資料,獲取的都是 1
獲取列
long iColumn = range.get_Column(); 一直獲取的都是 1
long iColumn = range.get_Count(); 這個獲取的是正常的
想問一下大佬,到底是什么問題,為什么一直獲取不到行
uj5u.com熱心網友回復:
https://download.csdn.net/download/yeah2000/3576494參考
uj5u.com熱心網友回復:
// Excel14.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <tchar.h>
#import "C:/Program Files/Common Files/Microsoft Shared/OFFICE14/mso.dll" \
rename("RGB", "RBGMSO") rename("SearchPath", "SearchPathMSO") \
rename("DocumentProperties", "DocumentPropertiesMSO") no_auto_exclude
#import "C:/Program Files/Common Files/Microsoft Shared/VBA/VBA6/VBE6EXT.OLB" no_namespace
#import "C:/Program Files/Microsoft Office/OFFICE14/excel.exe" \
rename("IFont", "IFontXL") \
rename("DialogBox", "ExcelDialogBox") rename("RGB", "ExcelRGB") \
rename("CopyFile", "ExcelCopyFile") rename("ReplaceText", "ExcelReplaceText") \
void dump_com_error(_com_error &e)
{
_tprintf(_T("Oops - hit an error!\n"));
_tprintf(_T("\a\tCode = %08lx\n"), e.Error());
_tprintf(_T("\a\tCode meaning = %s\n"), e.ErrorMessage());
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
_tprintf(_T("\a\tSource = %s\n"), (LPCTSTR) bstrSource);
_tprintf(_T("\a\tDescription = %s\n"), (LPCTSTR) bstrDescription);
}
struct StartOle {
StartOle() { CoInitialize(NULL); }
~StartOle() { CoUninitialize(); }
} _inst_StartOle;
int main(int argc, char* argv[])
{
using namespace Office;
using namespace Excel;
_ApplicationPtr pXL;
try
{
pXL.CreateInstance(L"Excel.Application");
pXL->PutVisible(0, VARIANT_TRUE);
WorkbooksPtr pBooks = pXL->Workbooks;
_WorkbookPtr pBook = pBooks->Add((long)xlWorksheet);
_WorksheetPtr pSheet = pXL->ActiveSheet;
//修改標名
try
{
// This one will fail
pSheet->Name = "Market Share?";
}
catch (_com_error &e)
{
dump_com_error(e);
}
pSheet->Name = "Market Share!";
//讀寫資料
{
pSheet->Range["A2"]->Value2 = "Company A";
_bstr_t bStr = pSheet->Range["A2"]->Value2;
_tprintf(_T("\"A2\" = %s\n"), (LPCTSTR)bStr);
}
//插入超鏈接
try
{
//Range("I4").Select
//ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _
// "http://bbs.csdn.net/topics/392326155", TextToDisplay:="測驗超鏈接"
RangePtr pRang = pSheet->Range["I4"];
HyperlinksPtr pLinks = pSheet->Hyperlinks;
pLinks->Add(pRang,
"http://bbs.csdn.net/topics/392375991",
vtMissing,
vtMissing,
"測驗超鏈接");
}
catch(_com_error &e)
{
dump_com_error(e);
}
//插入圖片
try
{
Excel::ShapesPtr pShapes = pSheet->Shapes;
RangePtr range = pSheet->Range["H1:O10"];
float l = range->Left, t = range->Top;
float w = range->Width, h = range->Height;
Excel::ShapePtr pShape = pShapes->AddPicture( _bstr_t("C:\\tt.jpg"),
msoFalse, msoTrue, l, t, w, h);
}
catch(_com_error &e)
{
dump_com_error(e);
}
//插入餅狀圖
try
{
pSheet->Range["A2"]->Value2 = "Company A";
pSheet->Range["B2"]->Value2 = "Company B";
pSheet->Range["C2"]->Value2 = "Company C";
pSheet->Range["D2"]->Value2 = "Company D";
pSheet->Range["A3"]->Value2 = 75.0;
pSheet->Range["B3"]->Value2 = 14.0;
pSheet->Range["C3"]->Value2 = 7.0;
pSheet->Range["D3"]->Value2 = 4.0;
pSheet->Range["A4"]->Value2 = 75.0;
pSheet->Range["B4"]->Value2 = 14.0;
pSheet->Range["C4"]->Value2 = 7.0;
pSheet->Range["D4"]->Value2 = 4.0;
RangePtr pRange = pSheet->Range["A2:D3"];
_ChartPtr pChart = pBook->Charts->Add();
pChart->ChartWizard((Range*) pRange, (long) Office::xl3DPie, 7L, (long) Office::xlRows,
1L, 0L, 2L, "Market Share");
}
catch( _com_error &e)
{
dump_com_error(e);
}
//設定頁面格式
try
{
PageSetupPtr pPageSet = pSheet->PageSetup;
pPageSet->PutPaperSize( xlPaperA4 ); //A4
pPageSet->CenterHorizontally = VARIANT_TRUE; //水平居中
pPageSet->PutOrientation( xlLandscape ); //橫向列印
pPageSet->PrintArea = "$A$1:$J$22"; //列印區域
}
catch(_com_error &e)
{
dump_com_error(e);
}
Sleep(6000);
pBook->PutSaved(0, VARIANT_TRUE);
pXL->Quit();
}
catch(_com_error &e)
{
dump_com_error(e);
}
return 0;
}
uj5u.com熱心網友回復:
這是什么啊?uj5u.com熱心網友回復:
僅憑這些無法判斷,貼全代碼及excel資料uj5u.com熱心網友回復:
HRESULT hr;
hr = CoInitialize(NULL);
if( FAILED(hr) )
{
AfxMessageBox(_T("Failed to call Coinitialize()"));
}
CWorkbooks books;
CWorkbook book;
CApplication app;
CWorksheets sheets;
CWorksheet sheet;
CRange range;
LPDISPATCH lpDisp;
COleVariant vResult;
COleVariant covOptional((long) DISP_E_PARAMNOTFOUND, VT_ERROR);
CString strPath = m_strAppPath + _T("testExecl.xls");
DWORD dwAttrib = GetFileAttributes(strPath);
BOOL bExists = (INVALID_FILE_ATTRIBUTES != dwAttrib) && (0 == (dwAttrib & FILE_ATTRIBUTE_DIRECTORY));
//TRACE("bExists -> %d", bExists);
if (!app.CreateDispatch(_T("Excel.Application"), NULL))
{
AfxMessageBox(_T("無法啟動服務器"));
return false;
}
//得到Workbook
books.AttachDispatch(app.get_Workbooks());
if( bExists )
{
lpDisp = books.Open(strPath, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing,
vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing);
book.AttachDispatch(lpDisp);
}
else
{
book.AttachDispatch(books.Add(covOptional), true);
}
sheets.AttachDispatch(book.get_Worksheets(), true);
sheet.AttachDispatch(sheets.get_Item(_variant_t("sheet1")), true); // 獲取EXCEL, sheet1頁面
//range = sheet.get_UsedRange();
range.AttachDispatch(sheet.get_UsedRange());
CRange usedRange;
usedRange.AttachDispatch(range.get_Rows(), true);
long iRow = usedRange.get_Count();
usedRange.AttachDispatch(range.get_Columns(), true);
long iColumn = usedRange.get_Count();
usedRange.ReleaseDispatch();
long iSheetCount = sheets.get_Count();
//range = range.get_Rows();
//long iRow = range.get_Row();
//long iRow = range.get_Count();
//range = range.get_Columns();
//long iColumn = range.get_Column();
//long iColumn = range.get_Count();
TRACE("excel Sheet -> %d \n row -> %d \n column -> %d", iSheetCount, iRow, iColumn);
CString strCell_1, strCell_2, strCell_3, strCell_4;
strCell_1.Format(_T("A%d"), (iRow + 1));
strCell_2.Format(_T("B%d"), (iRow + 1));
strCell_3.Format(_T("C%d"), (iRow + 1));
strCell_4.Format(_T("D%d"), (iRow + 1));
OutputDebugString(_T("\n") + strCell_1 + strCell_2 + strCell_3 + strCell_4);
range = sheet.get_Range(COleVariant(strCell_1), COleVariant(strCell_1)); // 獲取單元格
range.put_Value2(COleVariant(cs1)); // 往單元格寫入資料
range = sheet.get_Range(COleVariant(strCell_2), COleVariant(strCell_2));
range.put_Value2(COleVariant(cs2));
range = sheet.get_Range(COleVariant(strCell_3), COleVariant(strCell_3));
range.put_Value2(COleVariant(cs3));
range = sheet.get_Range(COleVariant(strCell_4), COleVariant(strCell_4));
range.put_Value2(COleVariant(cs4));
//app.put_Visible(TRUE); // 寫入資料時候打開EXCEL檔案, 默認為FALSE
//book.SaveCopyAs(COleVariant(strPath));
//當檔案不存在用SAVEAS ,檔案存在用SAVE, 否則會彈出對話框
if( bExists )
{
book.Save();
}
else
{
book.SaveAs(COleVariant(strPath), vtMissing, vtMissing, vtMissing, vtMissing, vtMissing,
0, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing);
}
book.put_Saved(TRUE);
books.Close(); // 關于屏蔽掉最后“確定改變檔案”的對話框,用Book的close方法
app.Quit();
range.ReleaseDispatch();
sheet.ReleaseDispatch();
sheets.ReleaseDispatch();
book.ReleaseDispatch();
books.ReleaseDispatch();
app.ReleaseDispatch();
uj5u.com熱心網友回復:
usedRange.AttachDispatch(range.get_Rows(), true);long iRow = usedRange.get_Count();
usedRange.AttachDispatch(range.get_Columns(), true);///????
pRangle.AttachDispatch( pRangle.get_Rows(), TRUE );
lUsedRowNum = pRangle.get_Count();
uj5u.com熱心網友回復:
你這段代碼沒問題啊,上面是我眼花看錯了,一樓的有問題uj5u.com熱心網友回復:
range.AttachDispatch(sheet.get_UsedRange());long iSheetCount = sheets.get_Count();
-------------------------------------
你怎么先獲取使用范圍,再獲取sheet數目啊??
正常流程不是先獲取sheet數目,再選擇某個sheet,再獲取這個sheet的使用范圍嗎?你可能順序搞反了
uj5u.com熱心網友回復:
沒有獲取到rangeuj5u.com熱心網友回復:
m_sheets = m_book.get_Worksheets();
m_sheet = m_sheets.get_Item(COleVariant((long)(1)));
m_range = m_sheet.get_UsedRange();
m_range = m_range.get_Rows();
nrow = m_range.get_Count();
m_range.ReleaseDispatch();
m_range = m_sheet.get_UsedRange();
m_range = m_range.get_Columns();
ncol = m_range.get_Count();
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/65506.html
標籤:基礎類
上一篇:如何對不光滑的邊緣做曲線擬合
