vc++ 操作excel文件方法Word格式.docx
- 文档编号:22504082
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:16
- 大小:22.36KB
vc++ 操作excel文件方法Word格式.docx
《vc++ 操作excel文件方法Word格式.docx》由会员分享,可在线阅读,更多相关《vc++ 操作excel文件方法Word格式.docx(16页珍藏版)》请在冰豆网上搜索。
,"
MSRGB"
)
\ProgramFiles\CommonFiles\MicrosoftShared\VBA\VBA6\VBE6EXT.OLB"
raw_interfaces_only,\
rename("
Reference"
ignorethis"
),rename("
VBE"
JOEVBE"
\ProgramFiles\MicrosoftOffice\OFFICE11\excel.exe"
exclude("
IFont"
IPicture"
)\
DialogBox"
),\
ReplaceText"
JOEReplaceText"
CopyFile"
"
JOECopyFile"
FindText"
JOEFindText"
NoPrompt"
JOENoPrompt"
usingnamespaceOffice;
usingnamespaceVBIDE;
usingnamespaceExcel;
intExportExcelFile();
intmain(intargc,char*argv[])
{
if(FAILED(:
:
CoInitialize(NULL)))
return1;
ExportExcelFile();
:
CoUninitialize();
return0;
}
intExportExcelFile()
_ApplicationPtrpApplication=NULL;
_WorkbookPtrpThisWorkbook=NULL;
_WorksheetPtrpThisWorksheet=NULL;
SheetsPtrpThisSheets=NULL;
RangePtrpThisRange=NULL;
_variant_tvt;
Excel:
XlFileFormatvFileFormat;
XlSaveAsAccessModevSaveAsAccessMode;
XlSaveConflictResolutionvSaveConflictResolution;
pApplication.CreateInstance("
Excel.Application"
);
pApplication->
PutVisible(0,VARIANT_TRUE);
pThisWorkbook=pApplication->
GetWorkbooks()->
Add();
pThisSheets=pThisWorkbook->
GetWorksheets();
pThisWorksheet=pThisSheets->
GetItem((short)1);
//设置整个sheet的填充色为白色
pThisWorksheet->
GetCells()->
GetInterior()->
PutColor(RGB(255,255,255));
ClearContents();
pThisRange=pThisWorksheet->
GetRange("
A1:
C5"
);
pThisRange->
ClearFormats();
//如果有不会的,可以在debug文件夹的excel.tlh里找找
//pThisRange->
GetItem(1,1);
PutItem(1,1,_variant_t("
哈尔滨市平房区"
));
PutItem(1,2,_variant_t("
高宏伟"
PutItem(1,3,_variant_t("
QQ:
21807822"
PutItem(2,1,_variant_t("
1"
PutItem(3,1,_variant_t("
2"
PutItem(4,1,_variant_t("
3"
PutItem(5,1,_variant_t("
4"
//为Range的四周和内部加上边框
GetBorders()->
GetItem(xlEdgeLeft)->
PutLineStyle(xlContinuous);
GetItem(xlEdgeTop)->
GetItem(xlEdgeRight)->
GetItem(xlEdgeBottom)->
GetItem(xlInsideHorizontal)->
GetItem(xlInsideVertical)->
//设置第一行的格式(背景色、粗体、颜色、列宽)
C1"
)->
ColorIndex=47;
Pattern=xlPatternSolid;
GetFont()->
ColorIndex=6;
Bold=TRUE;
GetEntireColumn()->
ColumnWidth=18.63;
A2:
ColorIndex=16;
ColorIndex=2;
//冻结窗格
ActiveWindow->
FreezePanes=FALSE;
Range["
A2"
]->
Select();
FreezePanes=TRUE;
//存盘退出
vSaveAsAccessMode=xlNoChange;
vFileFormat=xlWorkbookNormal;
vSaveConflictResolution=xlLocalSessionChanges;
pThisWorkbook->
SaveAs(_variant_t("
D:
\\VisualStudioProjects\\VCReportDemo\\joe.xls"
),vFileFormat,_variant_t("
"
),_variant_t("
),_variant_t(false),
_variant_t(false),vSaveAsAccessMode,vSaveConflictResolution,_variant_t(false));
Close();
Quit();
return0;
VC操作Excel文件保存问题
用VC对Excel文件进行写操作后,在程序结束前需要对一些对象进行收尾工作,如调用_Workbook:
Save()方法(该方法是Microsoft提供的供VC调用的对Excel文件操作的标准方法,在文件excel9.cpp或excel.cpp中定义)保存文件。
问题就出现在这里,若选取要保存的Excel文件以前不存在则程序创建一个同名的空Excel文件,对Excel表的操作实际是对其同名副本的操作,Save()方法会触发一个"
另存为"
的对话框,需要覆盖原来同名的空Excel文件,否则写入Excel的数据会丢失。
若选取的Excel文件已经存在,则调用Save()方法不会触发"
对话框,系统会自动保存写到Excel中的数据。
需要说明的是,在调用Save()前,已经调用过SetAlertBeforeOverwriting(FALSE)和SetDisplayAlerts(FALSE)关掉一些警告窗口了。
若调用SaveAs()方法,虽不会触发"
对话框,但会出抛出“找不到成员”的错误,这时保存写好的Excel文件后并重新打开发现数据还是丢失。
想尽所有办法,可总无法去掉那个讨厌的"
对话框,请各位大虾帮忙。
多谢了!
SaveAs()是excelapp的方法吗。
xlApp.ActiveWorkbook.SaveAs"
\excel.xls"
xlApp.Quit
我的没有问题。
如今Excel是越来越重要了,在我们自己开发的程序中不免要和Excel打交道了。
利用Automation技术,我们可以在不去了解
数据库的情况下玩转Excel,而且你会发现一切竟如此轻松!
好了,咱们开始吧,我不喜欢用长篇累牍的代码来故弄玄虚,所以下面的代码都是切中要害的片段,总体上是个连贯的过程,
包括启动Excel,读取数据,写入数据,以及最后的关闭Excel,其中还包括了很多人感兴趣的合并单元格的处理。
特别说明以下代码需要MFC的支持,而且工程中还要包含EXCEL2000的定义文件:
EXCEL9.H,EXCEL9.CPP
*****************************************************************************************************************
//*****
//变量定义
_Applicationapp;
Workbooksbooks;
_Workbookbook;
Worksheetssheets;
_Worksheetsheet;
Rangerange;
RangeiCell;
LPDISPATCHlpDisp;
COleVariantvResult;
COleVariant
covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
//初始化COM的动态连接库
if(!
AfxOleInit())
{
AfxMessageBox("
无法初始化COM的动态连接库!
return;
}
//创建Excel2000服务器(启动Excel)
app.CreateDispatch("
))
无法启动Excel服务器!
return;
}
app.SetVisible(TRUE);
//使Excel可见
app.SetUserControl(TRUE);
//允许其它用户控制Excel
//*****
//打开c:
\\1.xls
books.AttachDispatch(app.GetWorkbooks());
lpDisp=books.Open("
\\\\1.xls"
covOptional,covOptional,covOptional,covOptional,covOptional,
covOptional,covOptional);
//得到Workbook
book.AttachDispatch(lpDisp);
//得到Worksheets
sheets.AttachDispatch(book.GetWorksheets());
//得到当前活跃sheet
//如果有单元格正处于编辑状态中,此操作不能返回,会一直等待
lpDisp=book.GetActiveSheet();
sheet.AttachDispatch(lpDisp);
//读取已经使用区域的信息,包括已经使用的行数、列数、起始行、起始列
RangeusedRange;
usedRange.AttachDispatch(sheet.GetUsedRange());
range.AttachDispatch(usedRange.GetRows());
longiRowNum=range.GetCount();
//已经使用的行数
range.AttachDispatch(usedRange.GetColumns());
longiColNum=range.GetCount();
//已经使用的列数
longiStartRow=usedRange.GetRow();
//已使用区域的起始行,从1开始
longiStartCol=usedRange.GetColumn();
//已使用区域的起始列,从1开始
//读取第一个单元格的值
range.AttachDispatch(sheet.GetCells());
range.AttachDispatch(range.GetItem(COleVariant((long)1),COleVariant((long)1)).pdispVal);
COleVariantvResult=range.GetValue();
CStringstr;
if(vResult.vt==VT_BSTR)//字符串
str=vResult.bstrVal;
elseif(vResult.vt==VT_R8)//8字节的数字
str.Format("
%f"
vResult.dblVal);
elseif(vResult.vt==VT_DATE)//时间格式
SYSTEMTIMEst;
VariantTimeToSystemTime(&
vResult.date,&
st);
elseif(vResult.vt==VT_EMPTY)//单元格空的
str="
;
//读取第一个单元格的对齐方式,数据类型:
VT_I4
//读取水平对齐方式
iCell.AttachDispatch((range.GetItem(COleVariant(long
(1)),COleVariant(long
(1)))).pdispVal);
vResult.lVal=0;
vResult=iCell.GetHorizontalAlignment();
if(vResult.lVal!
=0)
switch(vResult.lVal)
case1:
//默认
break;
case-4108:
//居中
case-4131:
//靠左
case-4152:
//靠右
//垂直对齐方式
vResult=iCell.GetVerticalAlignment();
case-4160:
//靠上
case-4108:
case-4107:
//靠下
//设置第一个单元格的值"
HI,EXCEL!
range.SetItem(COleVariant
(1),COleVariant
(1),COleVariant("
));
//设置第一个单元格字体颜色:
红色
Fontfont;
range.AttachDispatch((range.GetItem(COleVariant(long
(1)),COleVariant(long
(1)))).pdispVal);
font.SetColor(COleVariant((long)0xFF0000));
//合并单元格的处理
//包括判断第一个单元格是否为合并单元格,以及将第一个单元格进行合并
RangeunionRange;
unionRange.AttachDispatch(range.GetItem(COleVariant((long)1),COleVariant((long)1)).pdispVal);
vResult=unionRange.GetMergeCells();
if(vResult.boolVal==-1)//是合并的单元格
//合并单元格的行数
range.AttachDispatch(unionRange.GetRows());
longiUnionRowNum=range.GetCount();
//合并单元格的列数
range.AttachDispatch(unionRange.GetColumns());
longiUnionColumnNum=range.GetCount();
//合并区域的起始行,列
longiUnionStartRow=unionRange.GetRow();
//起始行,从1开始
longiUnionStartCol=unionRange.GetColumn();
//起始列,从1开始
elseif(vResult.boolVal==0)
{//不是合并的单元格}
//将第一个单元格合并成2行,3列
unionRange.AttachDispatch(unionRange.GetResize(COleVariant((long)2),COleVariant((long)3)));
unionRange.Merge(COleVariant((long)0));
//合并单元格
//将文件保存为2.xls
book.SaveAs(COleVariant("
\\\\2.xls"
),covOptional,covOptional,\\
covOptional,covOptional,covOptional,0,\\
covOptional,covOptional,covOptional,covOptional);
//关闭所有的book,退出Excel
book.Close(covOptional,COl
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- vc+ 操作excel文件方法 vc 操作 excel 文件 方法