




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Office在线编辑功能实现1 DSOFramer控件说明DSOFramer.ocx控件是微软提供一款开源的用于在线编辑、调用Word、 Excel 、PowerPoint等的ActiveX控件。国内很多著名的OA中间件,电子印章,签名留痕等大多数是依此改进而来的。只要本地安装注册DSOFramer控件,并且安装了OFFICE软件,即可实现其强大的在线编辑功能。1.1 DSOFramer控件接口在jsp页面中添加如下脚本代码,实现控件的引用:1.1.1 新建文档/新建Word/document.all.FramerControl1.CreateNew(Word.Document);/新建Exceldocument.all.FramerControl1.CreateNew(Excel.Sheet);1.1.2 打开文档/打开制定的本地文件document.all.FramerControl1.Open(C:TestBook.xls);/制定用Word来打开c:plain.txt文件document.all.FramerControl1.Open(C:Plain.txt,false, Word.Document);/打开服务器的文件 document.all.FramerControl1.Open https:/secureserver/test/mytest.asp?id=123,true, Excel.Sheet, MyUserAccount, MyPassword);/打开服务器的文件 document.all.FramerControl1.Open(http:/localhost/1.doc, true);1.1.3 保存文档*/到本地document.all.FramerControl1.Save(c:1.doc,true);/服务器 /*增加Http协议Post上传接口,可以Post一个动态页面(jsp,asp,php.),由动态页面负责解析数据bool HttpInit();bool HttpAddPostString(BSTR strName, BSTR strValue);bool HttpAddPostCurrFile(BSTR strFileID, BSTR strFileName);BSTR HttpPost(BSTR bstr); */初始化Http引擎document.all.FramerControl1.HttpInit();/增加Post变量document.all.FramerControl1.HttpAddPostString(RecordID,20060102200);document.all.FramerControl1.HttpAddPostString(UserID,李局长);/上传打开的文件document.all.FramerControl1.HttpAddPostCurrFile(FileData, 文档名.doc);/执行上传动作document.all.FramerControl1.HttpPost(/uploadfile.asp); 1.1.4修订痕迹/进入留痕状态document.all.FramerControl1.SetTrackRevisions(1);/进入非留痕状态document.all.FramerControl1.SetTrackRevisions(0);/接受当前修订document.all.FramerControl1.SetTrackRevisions(4);1.1.5设置当前用户document.all.FramerControl1.SetCurrUserName(张三); 1.1.6设置和创建书签,此功能比较强大,设置书签数据、添加书签和添加红头文件SetFieldValue(BSTR strFieldName, BSTR strValue, BSTR strCmdOrSheetName)strFieldName:书签名strValue:要设置的值strCmdOrSheetName:命令 :ADDMARK: 添加BookMark:DELMARK: 删除这个BookMark:GETMARK: 定位到这个BookMark:FILE: 插入的是文件:JPG: 插入的是图片一般来说:WORD中书签是做好的,可以通过此接口把外界数据设置进书签中去。*/在当前WORD位置插入标签,标签名 book1,数值 testdocument.all.FramerControl1.SetFieldValue(book1,test,:ADDMARK:);/设置书签Time,数值 2006-03-16 22:22:22document.all.FramerControl1.SetFieldValue(Time,2006-03-16 22:22:22,);/在书签位置hongtou,插入红头文件22/hongtou1.doc 这 ,红头 动插进去 document.all.FramerControl1.SetFieldValue(hongtou,22/hongtou1.doc,:FILE:);1.1.7删除本地文件HRESULT DeleteLocalFile(in BSTR strFilePath); 数:strFileName:文件本地 ,如c:11.doc 1.1.8 创建 文件HRESULT GetTempFilePath(out,retval BSTR* strValue); :文件的 地 。 用 ,用DeleteLocalFile 删除1.1.9 下 文件HRESULT DownloadFile( in BSTR strRemoteFile, in BSTR strLocalFile, out,retval BSTR* strValue); 数:strRemoteFile: 地 ,http or FtpstrLocalFile: 本地 地 ,if strLocalFile = NULL then Create Temp File and return TempFiles Path1.1.10 增加Http上传 的, 加 文件HRESULT HttpAddPostFile(in BSTR strFileID, in BSTR strFileName, out,retval long* pbool);数:strFileID:文件的ID, 服务器 页面解析 strFileName: 本地文件地 1.2在Unieap中的应用现在以实 在Unieap 中 用,在数据中创建一张TEST_WORD:CREATE TABLE TEST_WORD ( ROW_ID NUMBER NOT NULL, CONTEXT BLOB, PRIMARY KEY (ROW_ID) )中CONTEXT用currency1 文件, “ BLOB。1.2.1 修改*-ORACLE.XML文件由currency1ORACALE数据BLOB“数据插入的制,fi当新增一fl数据的 接插入数据到BLOB“的中,以 :1.插入一flBLOB“ 的。2.”新插入的fl数据执行新作, 文件数据以数 新到的BLOB“中。以 要修DAO下的*-ORACLE.XML文件:1.2.2 修改VOcurrency1BLOB“的, 用代码器的VO的“是String的,以要修 byte“,代码如下:private byte tw_CONTEXT; public byte getTw_CONTEXT() return tw_CONTEXT;public void setTw_CONTEXT(byte tw_CONTEXT) this.tw_CONTEXT = tw_CONTEXT;1.2.3 修改 ORM 页面的WORD文件 要通过FORM传到 ,以在form中currency1BLOB“的变量 能 String“ , 是设置 FormFile“:private FormFile tw_CONTEXT;public FormFile getTw_CONTEXT() return tw_CONTEXT;public void setTw_CONTEXT(FormFile tw_CONTEXT) this.tw_CONTEXT = tw_CONTEXT;public EAPValueObject transform() WordVO vo = new WordVO();vo.setTw_ROW_ID(EAPDataFormat.parseString(tw_ROW_ID, vo.getTw_ROW_ID();tryInputStream inputStream = tw_CONTEXT.getInputStream();vo.setTw_CONTEXT(getBytes(inputStream); catch(Exception ex)return vo;/ InputStream“ 数 public static byte getBytes(InputStream is)throws Exceptionbyte data = null;Collection chunks = new ArrayList();byte buffer = new byte1024*1000;int read = -1;int size = 0;while(read=is.read(buffer)!=-1)if(read0)byte chunk = new byteread;System.arraycopy(buffer,0,chunk,0,read);chunks.add(chunk);size += chunk.length;if(size0)ByteArrayOutputStream bos = null;trybos = new ByteArrayOutputStream(size);for(Iterator itr=chunks.iterator();itr.hasNext();)byte chunk = (byte)itr.next();bos.write(chunk);data = bos.toByteArray();finallyif(bos!=null) bos.close();return data;/* 实现* 传入的数据 (VO)到当前 * 建议 用EAPDataFormat.toString()进行“*/ public void transform(EAPValueObject _vo) WordVO vo = (WordVO)_vo;tw_ROW_ID = EAPDataFormat.toString(vo.getTw_ROW_ID();: 中 传入的数据 (VO)到当前 中 要VO中的BLOB“做。1.2.4 修DAO前面 说过 ,由currency1ORACLE本 的制,在BLOB“数据新增作的 要执行插入BLOB在新BLOB“作,以修代码如下:public boolean doInsertByVO(EAPValueObject vo) throws EAPDAOExceptionboolean result = true;WordVO wordVO = (WordVO)vo;tryresult = daoCommand.sm_insert(this.getNameSpace()+.+SQL_INSERT_BY_VO, vo);if(result)result = doUpdateByVO(wordVO);return result; catch(Exception ex) throw new EAPDAOException(ex); public boolean doUpdateByVO(EAPValueObject vo) throws EAPDAOExceptiontryreturn daoCommand.sm_update(this.getNameSpace()+.+SQL_UPDATE_BY_VO, vo); catch(Exception ex)throw new EAPDAOException(ex);1.2.5 修Service添加doGetFileData :public void doGetFileData(EAPRequest eapReq, EAPResponse eapResp) throws EAPServiceExceptioncommonBizInvoke(eapReq, eapResp, new EAPBizServiceHandleImpl(false)public boolean process(EAPRequest eapReq, EAPResponse eapResp)long idList = (long)eapReq.getDefaultData();EAPValueObject vo = null;EAPBizBO bo = getActiveBO();if(bo!=null & idList!=null)vo = bo.doFind(eapReq.getUserToken(), idList0);WordVO wordVO = (WordVO)vo;eapResp.setData(Tw_CONTEXT_BYTE,wordVO.getTw_CONTEXT();eapResp.setDefaultData(vo);return true;);1.2.6修Action添加doGetFileData :public ActionForward doGetFileData(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exceptionreturn monBizInvoke(mapping, form, request, response, this.getServiceName(), doGetFileData,new EAPBizActionHandleImpl() public boolean assembleRequest(EAPBizRequestEvent reqEvent) long idList = new long1;idList0 = Long.parseLong(reqEvent.getHttpRequest().getParameter(rowId);reqEvent.getEAPRequest().setDefaultData(idList);return true;public ActionForward assembleResponse(EAPBizResponseEvent respEvent)assembleResponseForm(respEvent.getHttpRequest(), respEvent.getForm(), respEvent.getEAPResponse();assembleResponseResult(respEvent.getHttpRequest(), respEvent.getEAPResponse();respEvent.getHttpRequest().setAttribute(FILE_DATA,(byte)respEvent.getEAPResponse().getData(Tw_CONTEXT_BYTE);return respEvent.getMapping().findForward(getFileData););1.2.7修 的struts-config.xml文件添加一个页面 定 :1.2.8 添加jsp 文件1. 添加加 数据文件数据的jsp文件:ReadData.jsp,脚本代码如下: ServletOutputStream sos=response.getOutputStream();try/String type = request.getParameter(type) = null ? image/pjpeg : request.getParameter(type);response.setContentType(application/msword);int len = (byte)request.getAttribute(FILE_DATA).length;InputStream stream = new ByteArrayInputStream(byte)request.getAttribute(FILE_DATA);sos.write(byte)request.getAttribute(FILE_DATA),0,len);sos.close();catch(Exception ex)%2. 添加dsoframer.ocx文件一置在一个 用的置文件 中。3. 添加 文件一 务 的 文件置currency1一个 用的文件 中。1.2.9 修adddEdit.jsp页面在这加 DSOFramer控件,实现在线office文档编辑、保存、 等 ,代码如下:/* 打开服务器文档 */function command_onclick_openServer()document.all.FramerControl1.Open(/test/testword/word/template1.doc, true);/* 以服务器 文档创建新文档 */function command_onclick_openModelDocu() document.all.FramerControl1.CreateNew(/test/testword/word/template1.doc);document.all.FramerControl1.SetFieldValue(MTL_NAME,);document.all.FramerControl1.SetFieldValue(COUNT,9999,);document.all.FramerControl1.SetFieldValue(SKU,);document.all.FramerControl1.SetFieldValue(AMT,999999,);/* 插入红头文件 */function command_onclick_insertFile()document.all.FramerControl1.CreateNew(/test/testword/word/template1.doc);document.all.FramerControl1.SetFieldValue(title,/test/testword/word/redTitle.doc,:FILE:);/* 打开数据文档 */function command_onclick_openDatabase()var url = test/testword/word/Word.do?method=doGetFileData&rowId=”&type=application/msword;alert(url);document.all.FramerControl1.Open(url, false, Word.Document, , );/* 文档作 大 到数据 */function command_onclick_saveToDatabase()var success = SaveDocumentToDB();if (success = true)alert(Save Word Document success);elsealert(Save error! Please try again after!);return false;/* 到本地 文档 */function command_onclick_save()document.all.FramerControl1.Save(c:temp.doc,true);/* 文档 */function command_onclick_close()document.all.FramerControl1.Close();/* 删除本地 文档 */function command_onclick_delete()/ 能删除 打开的文件,以上传 要 文件 删除。command_onclick_close();document.all.FramerControl1.DeleteLocalFile(c:temp.doc);/* 文件到数据, 文档 本地HTML文件 一 传到服务器 */function SaveDocumentToDB()/初始化Http引擎document.all.FramerControl1.HttpInit();/ ,设置 数document.all.FramerControl1.HttpAddPostString(SCSJ,2008-5-16 00:00:00);document.all.FramerControl1.HttpAddPostString(GZLJDID,2);/上传打开的文件document.all.FramerControl1.HttpAddPostCurrFile(tw_CONTEXT, );/执行上传动作var url = test/testword/word/Word.do?method=doAdd;tryvar tar = document.all.FramerControl1.HttpPost(url); catch(e)return false; finallyreturn true;/* 文档 初始化 */function FramerControl1_Init() document.all.FramerControl1.CreateNew(Word.Document);document.all.FramerControl1.ActiveDocument.Content.text = ,好;/, 删去-%word在线编辑 :代码的默认页面只能 form传递String “的值,以 要修页面的提 :1.2.10页面效果A推荐免费好用的Web在线Office(Word)编辑控件 DSOFramer下 +开发接口当前版本:V 2006-11-29DSOFramerdso接口说明版本修:V修:修 HttpPost 的一些问。 V增加:id(0x00010041), helpstring(Get Rev Index)HRESULT GetRevCount( out,retval long * pbool);id(0x00010042), helpstring(Get Rev Index Info)HRESULT GetRevInfo(in long lIndex, in long lType, out,retval BSTR* pbool);id(0x00010043), helpstring(Set Doc Prop)HRESULT SetValue(in BSTR strValue, in BSTR strName, out,retval long* pbool);id(0x00010044), helpstring(Set Doc Variable)HRESULT SetDocVariable(in BSTR strVarName, in BSTR strValue,in long lOpt, out,retval long* pbool);id(0x00010045), helpstring(Save page To Doc)HRESULT SetPageAs(in BSTR strLocalFile, in long lPageNum, in long lType,out,retval long* pbool);-LoadDso.jsvar s = s += s += document.write(s) -接口文档:/*1.新建*/新建Worddocument.all.FramerControl1.CreateNew(Word.Document);/新建Exceldocument.all.FramerControl1.CreateNew(Excel.Sheet);/*2.打开文件*/打开制定的本地文件document.all.FramerControl1.Open(C:TestBook.xls);/制定用Word来打开c:plain.txt文件document.all.FramerControl1.Open(C:Plain.txt,false, Word.Document);/打开服务器的文件 document.all.FramerControl1.Open https:/secureserver/test/mytest.asp?id=123,true, Excel.Sheet, MyUserAccount, MyPassword);/打开服务器的文件 document.all.FramerControl1.Open(http:/localhost/1.doc, true);/*3. 文件*/到本地document.all.FramerControl1.Save(c:1.doc,true);/服务器 /*增加Http协议Post上传接口,可以Post一个动态页面(jsp,asp,php.),由动态页面负责解析数据bool HttpInit();bool HttpAddPostString(BSTR strName, BSTR strValue);bool HttpAddPostCurrFile(BSTR strFileID, BSTR strFileName);BSTR HttpPost(BSTR bstr); */初始化Http引擎document.all.FramerControl1.HttpInit();/增加Post变量document.all.FramerControl1.HttpAddPostString(RecordID,20060102200);document.all.FramerControl1.HttpAddPostString(UserID,李局长);/上传打开的文件document.all.FramerControl1.HttpAddPostCurrFile(FileData, 文档名.doc);/执行上传动作document.all.FramerControl1.HttpPost(/uploadfile.asp); /*4.修订留痕*/进入留痕状态document.all.FramerControl1.SetTrackRevisions(1);/进入非留痕状态document.all.FramerControl1.SetTrackRevisions(0);/接受当前修订document.all.FramerControl1.SetTrackRevisions(4);/*5.设置当前用户*/document.all.FramerControl1.SetCurrUserName(张三); /*6.设置当前 间(笔迹留痕会显 (Like 2006:02:07 11:11:11)*/document.all.FramerControl1.SetCurrTime(2006:02:07 11:11:11);/*7.设置和创建书签,此功能比较强大,设置书签数据、添加书签和添加红头文件 靠 SetFieldValue(BSTR strFieldName, BSTR strValue, BSTR strCmdOrSheetName)strFieldName:书签名strValue:要设置的值strCmdOrSheetName:命令 :ADDMARK: 添加BookMark:DELMARK: 删除这个BookMark:GETMARK: 定位到这个BookMark:FILE: 插入的是文件:JPG: 插入的是图片一般来说:WORD中书签是做好的,可以通过此接口把外界数据设置进书签中去。*/在当前WORD位置插入标签,标签名 book1,数值 testdocument.all.FramerControl1.SetFieldValue(book1,test,:ADDMARK:);/设置书签Time,数值 2006-03-16 22:22:22document.all.FramerControl1.SetFieldValue(Time,2006-03-16 22:22:22,);/在书签位置hongtou,插入红头文件22/hongtou1.doc 这 ,红头 动插进去 document.all.FramerControl1.SetFieldValue(hongtou,22/hongtou1.doc,:FILE:);/*8.设置菜 显 情况BOOL SetMenuDisplay(long lMenuFlag)lMenuFlag 以下数值的 合#define MNU_NEW 0x01#define MNU_OPEN 0x02#define MNU_CLOSE 0x04#define MNU_SAVE 0x08#define MNU_SAVEAS 0x16#define MNU_PGSETUP 0x64#define MNU_PRINT 0x256#define MNU_PROPS 0x32#define MNU_PRINTPV 0x126*/只“新建”菜 可用 document.all.FramerControl1.SetMenuDisplay(1);/只“打开”菜 可用 document.all.FramerControl1.SetMenuDisplay(2);/只“打开”和“新建”菜 可用 document.all.FramerControl1.SetMenuDisplay(3);/*9. 护文档和解 护文档lProOrUn:1: 护文档;0:解除 护lProType: wdNoProtection = -1,wdAllowOnlyRevisions = 0,wdAllowOnlyComments = 1,wdAllowOnlyFormFields = 2strProPWD:密码*/ 全 护文档,密码 pwd document.all.FramerControl1.ProtectDoc(1,1,pwd);/解除文档 护 document.all.FramerControl1.ProtectDoc(0,1,pwd);/*10.显 或隐藏修订内容ShowRevisions(long nNewValue)nNewValue = 0 则隐藏修订= 1 则显 修订*/显 修订留痕document.all.FramerControl1.ShowRevisions(1);/隐藏修订留痕document.all.FramerControl1.ShowRevisions(0);/*11.插入合 文件,strFieldPath 文件 ,可以是http,ftp的 pPos = 0 /当前鼠标位置1;文件开头2;文件末尾pPos的第4位 1的 ,代插入的是图片InSertFile(BSTR strFieldPath, long lPos)*/文件头部插入文件document.all.FramerControl1.InSertFile(http:/XX.com/XX.doc,1);/文件尾部插入文件 document.all.FramerControl1.InSertFile(http:/XX.com/XX.doc,2);/当前光标位置插入文件document.all.FramerControl1.InSertFile(http:/XX.com/XX.doc,0);/文件头部插入图片document.all.FramerControl1.InSertFile(http:/XX.com/XX.jpg,9);/文件尾部插入图片document.all.FramerControl1.InSertFile(http:/XX.com/XX.jpg,10);/当前光标位置插入图片document.all.FramerControl1.InSertFile(http:/XX.com/XX.jpg,8);/*0x31. 文档 HRESULT SaveAs(in VARIANT strFileName, in VARIANT dwFileFormat, out,retval long* pbool); 数:strFileName:文件本地 ,如c:11.docdwFileFormat: 文件格dwFileFormat的数值 :Excel: Typeenum XlFileFormatxlAddIn = 18,xlCSV = 6,xlCSVMac = 22,xlCSVMSDOS = 24,xlCSVWindows = 23,xlDBF2 = 7,xlDBF3 = 8,xlDBF4 = 11,xlDIF = 9,xlExcel2 = 16,xlExcel2FarEast = 27,xlExcel3 = 29,xlExcel4 = 33,xlExcel5 = 39,xlExcel7 = 39,xlExcel9795 = 43,xlExcel4Workbook = 35,xlIntlAddIn = 26,xlIntlMacro = 25,xlWorkbookNormal = -4143,xlSYLK = 2,xlTemplate = 17,xlCurrentPlatformText = -4158,xlTextMac = 19,xlTextMSDOS = 21,xlTextPrinter = 36,xlTextWindows = 20,xlWJ2WD1 = 14,xlWK1 = 5,xlWK1ALL = 31,xlWK1FMT = 30,xlWK3 = 15,xlWK4 = 38,xlWK3FM3 = 32,xlWKS = 4,xlWorks2FarEast = 28,xlWQ1 = 34,xlWJ3 = 40,xlWJ3FJ3 = 41,xlUnicodeText = 42,xlHtml = 44;Word: Typeenum WdSaveFormatwdFormatDocument = 0,wdFormatTemplate = 1,wdFormatText = 2,wdFormatTextLineBreaks = 3,wdFormatDOSText = 4,wdFormatDOSTextLineBreaks = 5,wdFormatRTF = 6,wdFormatUnicodeText = 7,wdFormatEncodedText = 7,wdFormatHTML = 8;PPT:enum PpSaveAsFileTypeppSaveAsPresentation = 1,ppSaveAsPowerPoint7 = 2,ppSaveAsPowerPoint4 = 3,ppSaveAsPowerPoint3 = 4,ppSaveAsTemplate = 5,ppSaveAsRTF = 6,ppSaveAsShow = 7,ppSaveAsAddIn = 8,ppSaveAsPowerPoint4FarEast = 10,ppSaveAsDefault = 11,ppSaveAsHTML = 12,ppSaveAsHTMLv3 = 13,ppSaveAsHTMLDual = 14,ppSaveAsMetaFile = 15,ppSaveAsGIF = 16,ppSaveAsJPG = 17,ppSaveAsPNG = 18,ppSaveAsBMP = 19;*/*0x32. 删除本地文件HRESULT DeleteLocalFile(in BSTR strFilePath); 数: strFileName:文件本地 ,如c:11.doc */ /*0x33.创建 文件HRESULT GetTempFilePath(out,retval BSTR* strValue); :文件的 地 。 用 ,用DeleteLocalFile 删除*/*0x34.设置文档显 HRESULT ShowView(in long dwViewType, out,retval long * pbool); dwViewType的可取值 :enum WdViewTypewdNormalView = 1,wdOutlineView = 2,wdPrintView = 3,wdPrintPreview = 4,wdMasterView = 5, /这个是大纲wdWebView = 6;*/ /大纲 document.all.FramerControl1.ShowView(5);/*0x39:下 文件HRESULT DownloadFile( in BSTR strRemoteFile, in BSTR strLocalFile, out,retval BSTR* strValue); 数:strRemoteFile: 地 ,http or F
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 订制衣柜门店客户服务职责
- 医疗质量事故应急处置培训计划
- 乳制品质量保证及检测控制措施
- 医疗科研人员廉洁从业九项准则心得体会
- 水上运动场夏季高温安全措施他
- 小型企业财务风险控制制度及流程他
- 苏教版六年级科学上册实验操作计划
- 公务员反腐倡廉自查心得体会
- 大型工程总包与分包协作措施
- 经典诵读兴趣小组师生互动计划
- 技术异化的解放路径-洞察及研究
- 2025年连云港市中考语文试卷真题(含标准答案)
- 2025年全国法医专项技术考试试题及答案
- 2025年宁夏银川市中考历史三模试卷(含答案)
- 口腔诊所规章管理制度
- 商业地产项目成本控制与管理措施
- 2025年切削刀具制造行业市场分析现状
- T/CGMA 033002-2020压缩空气站节能设计指南
- 2025江苏安全员c证考试试题及答案
- 装修利润分成协议书
- 城市老旧小区加装电梯项目可行性研究报告(2025年)
评论
0/150
提交评论