vb录制的宏是这样的...Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
Selection.TypeText Text:="标题1"
Selection.MoveLeft Unit:=wdCharacter, Count:=3, Extend:=wdExtend
Selection.Font.Bold = wdToggle
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.TypeParagraph
Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
Selection.Font.Bold = wdToggle
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=5, NumColumns:= _
1, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
wdAutoFitFixed
With Selection.Tables(1)
If .Style <> "网格型" Then
.Style = "网格型"
End If
.ApplyStyleHeadingRows = True
.ApplyStyleLastRow = False
.ApplyStyleFirstColumn = True
.ApplyStyleLastColumn = False
.ApplyStyleRowBands = True
.ApplyStyleColumnBands = False
End With
Selection.Tables(1).PreferredWidthType = wdPreferredWidthPoints
Selection.Tables(1).PreferredWidth = CentimetersToPoints(15)
Selection.Cells.Split NumRows:=1, NumColumns:=2, MergeBeforeSplit:=False
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.Tables(1).Columns(1).PreferredWidthType = wdPreferredWidthPoints
Selection.Tables(1).Columns(1).PreferredWidth = CentimetersToPoints(5)
自己写的vc
[co#import "C:\Program Files\Common Files\Microsoft Shared\OFFICE12\MSO.DLL"
#import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB"
#import "C:\Program Files\Microsoft Office\Office12\MSWORD.OLB" \
rename("RGB","_RGB") \
rename("ExitWindows","_ExitWindows") \
rename("FindText","_FindText")void COPWordDlgDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
::CoInitialize(NULL);
try
{
Word::_ApplicationPtr pApp;
pApp.CreateInstance(__uuidof(Word::Application));
if(!pApp)
{
MessageBox(_T("off error!"));
return ;
} Word::DocumentsPtr pDocs=pApp->GetDocuments();
pApp->Visible=true;
Word::_DocumentPtr pDoc1;
//pDoc1.CreateInstance(__uuidof(Word::Document));
CComVariant Template(_T(""));
CComVariant NewTemplate(false),DocumentType(0),Visible;
pDoc1=pDocs->Add(&Template,&NewTemplate,&DocumentType,&Visible);
//Word::SelectionPtr pSelection=pDoc1->GetSections();
Word::SelectionPtr pSelection=pApp->GetSelection();
pSelection->ParagraphFormat->Alignment=Word::wdAlignParagraphCenter;
pSelection->TypeText("标题1");
pSelection->MoveLeft(&CComVariant(Word::wdCharacter),&CComVariant(3),&CComVariant(3));
pSelection->Font->Bold=Word::wdToggle;
pSelection->MoveRight(&CComVariant(Word::wdCharacter),&CComVariant(1));
pSelection->TypeParagraph();
pSelection->ParagraphFormat->Alignment=Word::wdAlignParagraphLeft;
pSelection->Font->Bold=Word::wdToggle;
pDoc1->Tables->Add(pSelection->Range,5,1,
&CComVariant(Word::wdWord9TableBehavior),&CComVariant(Word::wdAutoFitFixed));
pSelection->Tables->Item(1)->ApplyStyleHeadingRows=true;
pSelection->Tables->Item(1)->ApplyStyleLastRow=false;
pSelection->Tables->Item(1)->ApplyStyleFirstColumn=true;
pSelection->Tables->Item(1)->ApplyStyleLastColumn=false;
pSelection->Tables->Item(1)->ApplyStyleRowBands=true;
pSelection->Tables->Item(1)->ApplyStyleColumnBands=false; pSelection->Tables->Item(1)->Columns->Item(1)->PreferredWidthType=Word::wdPreferredWidthPoints;
pSelection->Tables->Item(1)->Columns->Item(1)->PreferredWidth=15*9.45f; //问题1:不知道如何用CentimetersToPoints
pSelection->Cells->Split(&CComVariant(1),&CComVariant(2),&CComVariant(false));
pSelection->MoveLeft(&CComVariant(Word::wdCharacter),&CComVariant(1));
pSelection->Tables->Item(1)->Columns->Item(1)->PreferredWidthType=Word::wdPreferredWidthPoints; //问题2:无法访问此集合中单独的列,因为表格有混合的单元格宽度
pSelection->Tables->Item(1)->Columns->Item(1)->PreferredWidth=3*9.45f;
Word::InlineShapePtr pInlineShape=pSelection->InlineShapes->AddPicture("C:\\Documents and Settings\\C1\\桌面\\122.JPG",&CComVariant(false),&CComVariant(true));
pInlineShape->Width=10;
pInlineShape->Width=10;
pSelection->MoveRight(&CComVariant(Word::wdCharacter),&CComVariant(2));
pSelection->Cells->Split(&CComVariant(4),&CComVariant(1),&CComVariant(false));
// pApp->Quit(&SaveChanges,&OriginalFormat,&RouteDocument);
}
catch(_com_error &e)
{
MessageBox((_TCHAR*)e.Description());
}
::CoUninitialize();
}de=C/C++][/code]
代码是完全按照vb录制的宏来写的。次序都是一样的。但是出错了 错误在上面提示的 1 和2
现有3个问题:
问题1:CentimetersToPoints 使用这个函数的时候提示虚类无法实例化 可以理解因为是接口出来的。但是我现在想用应该如何使用?函数在Word::_Global中
问题2: 执行到 pSelection->Tables->Item(1)->Columns->Item(1)->PreferredWidthType=Word::wdPreferredWidthPoints; 提示:无法访问此集合中单独的列,因为表格有混合的单元格宽度。 但是vb宏中就过去了。
问题3:vb宏中 Selection.Tables(1).Columns(1) 这个方式方法 转换成vc的话是不是pSelection->Tables->Item(1)->Columns->Item(1)这种方式来实现的?
两个表示方法相同的吗?对于COM的属性数组一直没有理解好。
Selection.TypeText Text:="标题1"
Selection.MoveLeft Unit:=wdCharacter, Count:=3, Extend:=wdExtend
Selection.Font.Bold = wdToggle
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.TypeParagraph
Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
Selection.Font.Bold = wdToggle
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=5, NumColumns:= _
1, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
wdAutoFitFixed
With Selection.Tables(1)
If .Style <> "网格型" Then
.Style = "网格型"
End If
.ApplyStyleHeadingRows = True
.ApplyStyleLastRow = False
.ApplyStyleFirstColumn = True
.ApplyStyleLastColumn = False
.ApplyStyleRowBands = True
.ApplyStyleColumnBands = False
End With
Selection.Tables(1).PreferredWidthType = wdPreferredWidthPoints
Selection.Tables(1).PreferredWidth = CentimetersToPoints(15)
Selection.Cells.Split NumRows:=1, NumColumns:=2, MergeBeforeSplit:=False
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.Tables(1).Columns(1).PreferredWidthType = wdPreferredWidthPoints
Selection.Tables(1).Columns(1).PreferredWidth = CentimetersToPoints(5)
自己写的vc
[co#import "C:\Program Files\Common Files\Microsoft Shared\OFFICE12\MSO.DLL"
#import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB"
#import "C:\Program Files\Microsoft Office\Office12\MSWORD.OLB" \
rename("RGB","_RGB") \
rename("ExitWindows","_ExitWindows") \
rename("FindText","_FindText")void COPWordDlgDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
::CoInitialize(NULL);
try
{
Word::_ApplicationPtr pApp;
pApp.CreateInstance(__uuidof(Word::Application));
if(!pApp)
{
MessageBox(_T("off error!"));
return ;
} Word::DocumentsPtr pDocs=pApp->GetDocuments();
pApp->Visible=true;
Word::_DocumentPtr pDoc1;
//pDoc1.CreateInstance(__uuidof(Word::Document));
CComVariant Template(_T(""));
CComVariant NewTemplate(false),DocumentType(0),Visible;
pDoc1=pDocs->Add(&Template,&NewTemplate,&DocumentType,&Visible);
//Word::SelectionPtr pSelection=pDoc1->GetSections();
Word::SelectionPtr pSelection=pApp->GetSelection();
pSelection->ParagraphFormat->Alignment=Word::wdAlignParagraphCenter;
pSelection->TypeText("标题1");
pSelection->MoveLeft(&CComVariant(Word::wdCharacter),&CComVariant(3),&CComVariant(3));
pSelection->Font->Bold=Word::wdToggle;
pSelection->MoveRight(&CComVariant(Word::wdCharacter),&CComVariant(1));
pSelection->TypeParagraph();
pSelection->ParagraphFormat->Alignment=Word::wdAlignParagraphLeft;
pSelection->Font->Bold=Word::wdToggle;
pDoc1->Tables->Add(pSelection->Range,5,1,
&CComVariant(Word::wdWord9TableBehavior),&CComVariant(Word::wdAutoFitFixed));
pSelection->Tables->Item(1)->ApplyStyleHeadingRows=true;
pSelection->Tables->Item(1)->ApplyStyleLastRow=false;
pSelection->Tables->Item(1)->ApplyStyleFirstColumn=true;
pSelection->Tables->Item(1)->ApplyStyleLastColumn=false;
pSelection->Tables->Item(1)->ApplyStyleRowBands=true;
pSelection->Tables->Item(1)->ApplyStyleColumnBands=false; pSelection->Tables->Item(1)->Columns->Item(1)->PreferredWidthType=Word::wdPreferredWidthPoints;
pSelection->Tables->Item(1)->Columns->Item(1)->PreferredWidth=15*9.45f; //问题1:不知道如何用CentimetersToPoints
pSelection->Cells->Split(&CComVariant(1),&CComVariant(2),&CComVariant(false));
pSelection->MoveLeft(&CComVariant(Word::wdCharacter),&CComVariant(1));
pSelection->Tables->Item(1)->Columns->Item(1)->PreferredWidthType=Word::wdPreferredWidthPoints; //问题2:无法访问此集合中单独的列,因为表格有混合的单元格宽度
pSelection->Tables->Item(1)->Columns->Item(1)->PreferredWidth=3*9.45f;
Word::InlineShapePtr pInlineShape=pSelection->InlineShapes->AddPicture("C:\\Documents and Settings\\C1\\桌面\\122.JPG",&CComVariant(false),&CComVariant(true));
pInlineShape->Width=10;
pInlineShape->Width=10;
pSelection->MoveRight(&CComVariant(Word::wdCharacter),&CComVariant(2));
pSelection->Cells->Split(&CComVariant(4),&CComVariant(1),&CComVariant(false));
// pApp->Quit(&SaveChanges,&OriginalFormat,&RouteDocument);
}
catch(_com_error &e)
{
MessageBox((_TCHAR*)e.Description());
}
::CoUninitialize();
}de=C/C++][/code]
代码是完全按照vb录制的宏来写的。次序都是一样的。但是出错了 错误在上面提示的 1 和2
现有3个问题:
问题1:CentimetersToPoints 使用这个函数的时候提示虚类无法实例化 可以理解因为是接口出来的。但是我现在想用应该如何使用?函数在Word::_Global中
问题2: 执行到 pSelection->Tables->Item(1)->Columns->Item(1)->PreferredWidthType=Word::wdPreferredWidthPoints; 提示:无法访问此集合中单独的列,因为表格有混合的单元格宽度。 但是vb宏中就过去了。
问题3:vb宏中 Selection.Tables(1).Columns(1) 这个方式方法 转换成vc的话是不是pSelection->Tables->Item(1)->Columns->Item(1)这种方式来实现的?
两个表示方法相同的吗?对于COM的属性数组一直没有理解好。
解决方案 »
- 如何HOOK住IE里调用的ActiveX的函数?
- Installshield 10繁体乱码问题
- 请问如何判定一个给定的路径是否是回收站里面的文件呢?
- 怎么在Clistctrl里动态插入按钮呢
- 关于双击标题栏
- 如何禁止edit中输入中文字符?
- 怎么做.chm帮助文件?(急呀!)
- 终于,我想转行了,我很难过,可我没办法!
- 哪里的<<VisualC++ 技术内幕(第五版)>>8折以下可以买到?一定送分!!!
- 请问如何在程序开始时便自己定义窗口的大小,并且不能改变?
- (急切求助)如何把LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam){...} 封装成DLL文件?
- 匹配图像问题请教
2、既然有错误提示,就应该在代码中添加一些检测,或者用TRY-CATCH来捕获异常
3、理解正确。