如何按位置顺序得到一个word的所有书签?谢谢!

87607047 2012-09-17 03:17:01
妖哥以前的代码是按名称顺序的,如何按位置顺序得到书签列表呢?谢谢!

Variant vBookmarks = vDoc.OlePropertyGet("bookmarks");
// 书签的总数
int nBookmarkCount = vBookmarks.OlePropertyGet("Count");

// 遍历所有书签,并获取到名字,输出到界面上的Memo中
String strName;
for (int i = 0; i < nBookmarkCount; i++)
{
strName = vBookmarks.OleFunction("Item", i + 1).OlePropertyGet("Name");

Memo1->Lines->Add(strName);
}
...全文
266 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
87607047 2012-09-17
  • 打赏
  • 举报
回复
明白的了,不知道 vBookmark.OlePropertyGet("Start");这个用法,这种资料不知道哪里可以找到,关于ole 操作的资料太少了

谢谢妖哥!
ccrun.com 2012-09-17
  • 打赏
  • 举报
回复
OLE专业户来也!!!闲人退散。

int __fastcall CrnSortObject(TStringList *lst, int nIndex1, int nIndex2)
{
int n1 = (int)lst->Objects[nIndex1];
int n2 = (int)lst->Objects[nIndex2];

if (n1 < n2) return -1;
else if (n1 > n2) return 1;
else return 0;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
// 要打开的Doc文件名
WideString strDocName = L"D:\\ccrun\\csdn.doc";

// 创建Word对象
Variant vWordApp;
try
{
vWordApp = Variant::CreateObject("Word.Application");
}
catch(...)
{
MessageBox(Handle, "启动Word出错!",
Application->Title.c_str(), MB_OK | MB_ICONERROR);

return;
}

// 使Word界面可视
vWordApp.OlePropertySet("Visible", true);

// 打开指定的Word文档
Variant vDoc = vWordApp.OlePropertyGet("Documents").
OleFunction("Open", strDocName);

// 获取所有书签对象
Variant vBookmarks = vDoc.OlePropertyGet("bookmarks");
// 书签的总数
int nBookmarkCount = vBookmarks.OlePropertyGet("Count");

// 遍历所有书签,并获取到名字和起始位置
Variant vBookmark;
String strName;
int nStart;
TStringList *lst = new TStringList;

for (int i = 0; i < nBookmarkCount; i++)
{
vBookmark = vBookmarks.OleFunction("Item", i + 1);
strName = vBookmark.OlePropertyGet("Name");
nStart = vBookmark.OlePropertyGet("Start");

lst->AddObject(strName, (TObject *)nStart);
}

// 根据起始位置排序
lst->CustomSort(CrnSortObject);

// 将排序后的结果添加到Memo中
Memo1->Lines->Assign(lst);

delete lst;

// 后续代码依旧略过
// ...
}
首先当然是定义word模板,在需要替换的地方加上标签。 菜单-插入-书签,输入属性名,如year,date,pic1,voList等等。 打印页面: 需要把打印的数据从后台取出,以单个vo(一个对象)为一组,或以voList(对象的列表集合)为一组 组织好页面上 再得到这些数据后进行替换。 数据组织形式如下:
使用: <script type="text/javascript" src="../public/scripts/export2word.js"> function print2doc(){ //参数为模板(与页面的相对)路径 var word = new WordApp("test.doc"); //参数为form名,vo中需要添加的属性(为空时form里所有属性) var vo = word.getSingleVo("singleVo",["jcxcrs","xcjhl","tbjcxcrs"]); //var vo = word.getSingleVo("singleVo"); //组织成的图片vo var tpvo = word.getSingleVo("singleVo",["tptest"]); //参数为 form名,需要添加的属性(顺序为生成表格列的顺序,为空时form里的所有属性和顺序) var voList = word.getVoList("mxvoForm",["tbjcmcrs","tbjcmcrsbl","tbjczsrs"]); //var voList = word.getVoList("mxvoForm"); //替换普通书签 word.replaceBookmarkUsevo(vo); //替换图片书签 word.replaceBookmarkUsepicvo(tpvo); //替换书签jgList,画出表格形成多行数据。 word.replaceBookmarkUsevolist("jgList",voList); //文档可见 word.wordObj.visible=true; //word.closeApp(); } 一个servlet,如以*.png的请求转成.do的。如: public class PngDispatcherServlet extends HttpServlet { private static final long serialVersionUID = 6230740581031996144L; public void init() throws ServletException { } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //StringBuffer url = request.getRequestURL(); StringBuffer url = new StringBuffer(request.getRequestURI()); if(request.getQueryString() != null) { url.append('?'); url.append(request.getQueryString()); } String newUrl = url.toString().replaceAll(".png", ".do"); ServletContext sc = getServletContext(); RequestDispatcher rd = sc.getRequestDispatcher(newUrl); //定向的页面 rd.forward(request, response); } }

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧