当前位置: 首页 > news >正文

淄博市 网站建设报价新手如何自己做网站

淄博市 网站建设报价,新手如何自己做网站,淘宝网站是什么语言做的,WordPress动画随音乐变化最近公司项目有一个对Project导入导出的操作,现在市面上能同时对Project进行导入导出的除了微软自带的Microsoft.Office.Interop.MSProject,还有就是Aspose.Tasks for .NET。但因为后者是收费软件且破解版的现阶段只到18.11,只支持.net Frame…

最近公司项目有一个对Project导入导出的操作,现在市面上能同时对Project进行导入导出的除了微软自带的Microsoft.Office.Interop.MSProject,还有就是Aspose.Tasks for .NET。但因为后者是收费软件且破解版的现阶段只到18.11,只支持.net Framework,而我们的项目是用的netcore,在对Aspose.Tasks破解版进行测试的过程中始终提示“The opreation is not allowed in evaluation model”,未花费过多精力去研究Aspose.Tasks。转战Interop.MSProject,网上还是有相关参考资料,以下是我们的代码,(未进行方法封装优化):

需要用到COM组件:Microsoft.Office.Core以及 Microsoft.Office.Interop.MSProject

导出代码

public static void Export(List<ImportPlanMppModel> result, string fileSavePath){Microsoft.Office.Interop.MSProject.ApplicationClass prj = null;try{//创建COM(MSProject)prj = new Microsoft.Office.Interop.MSProject.ApplicationClass();prj.Visible = true;//创建Projectprj.FileNew(Type.Missing, Type.Missing, Type.Missing, false);//prj.SetField("责任人", "", true);//prj.SetField("责任人", "", true);//prj.CustomFieldValueListAdd(Microsoft.Office.Interop.MSProject.PjCustomField.pjCustomProjectEnterpriseText1, "123", "11", "111", "1232", "456");//prj.ShowAddNewColumn(10);//prj.AddNewColumn(7);Microsoft.Office.Interop.MSProject.Project myProject = prj.ActiveProject;Microsoft.Office.Interop.MSProject.PjFileFormat format = Microsoft.Office.Interop.MSProject.PjFileFormat.pjMPP;//format定义object missing = System.Reflection.Missing.Value;//missing值 //myProject.AutoTrack = true;//.........................................//myProject.HoursPerDay = 8;//myProject.HoursPerWeek = 56;//myProject.DaysPerMonth = 30;//Microsoft.Office.Interop.MSProject.WeekDays weedday = myProject.Calendar.WeekDays;//weedday[1].set_Working(true);//weedday[7].set_Working(true);//myProject.ShowCriticalSlack = 0;List<Microsoft.Office.Interop.MSProject.Task> taskList = new List<Microsoft.Office.Interop.MSProject.Task>();foreach (var item in result){Microsoft.Office.Interop.MSProject.Task task = null;//System.Threading.Thread.Sleep(1000);task = myProject.Tasks.Add(item.TaskName, Type.Missing);//item.Idtask.Duration = item.TaskDuration;if (item.TaskPlanStartDate.HasValue){task.Start = item.TaskPlanStartDate;}if (item.TaskPlanEndDate.HasValue){task.Finish = item.TaskPlanEndDate;}if (item.TaskActualStartDate.HasValue){task.ActualStart = item.TaskActualStartDate;}if (item.TaskActualEndDate.HasValue){task.ActualFinish = item.TaskActualEndDate;}if (item.TaskOutlineLevel > 0){task.OutlineLevel = Convert.ToInt16(item.TaskOutlineLevel);}//task.Milestone = dr["IsMTask"].ToString() == "1" ? true : false;//是否里程碑:0=否、1=是task.WBS = item.WBS;//负责人task.Text1 = item.ResponsibleUserName;//平米单价if (item.SquareMetrePrice.HasValue){task.Number1 = Convert.ToDouble(item.SquareMetrePrice);}//标记列task.Notes = item.Id.ToString();//资源名称//task.ResourceNames = "资源名称1,资源名称2";标记列//task.SetField(Microsoft.Office.Interop.MSProject.PjField.pjTaskNotes, "Task1");资源名称//task.SetField(Microsoft.Office.Interop.MSProject.PjField.pjTaskResourceNames, "wenzhixing,wen,zhi");//task.SetField(Microsoft.Office.Interop.MSProject.PjField.pjTaskText1, "负责人");//task.SetField(Microsoft.Office.Interop.MSProject.PjField.pjTaskNumber1, "10.231");//task.Rollup = true;taskList.Add(task);}for (int i = 0; i < taskList.Count; i++){Microsoft.Office.Interop.MSProject.Task task = taskList[i];var item = result.FirstOrDefault(x=>x.Id.ToString() == task.Notes);///前置任务if (!string.IsNullOrWhiteSpace(item.TaskPredecessorsIdStr)){for (int j = 0; j < item.TaskPredecessorsIdStr.Split(',').Length; j++){var dependencTaskId = item.TaskPredecessorsIdStr.Split(',')[j];var dependencTask = taskList.FirstOrDefault(x => x.Notes == dependencTaskId);if (dependencTask != null){var dependencTaskType = Enum.Parse<Microsoft.Office.Interop.MSProject.PjTaskLinkType>(item.TaskPredecessorsTypeStr.Split(',')[j]);task.TaskDependencies.Add(dependencTask, dependencTaskType, item.TaskPredecessorsDurationStr.Split(',')[j]);}}}}//保存到指定目录prj.FileSaveAs(fileSavePath, format, missing, missing, missing, missing, missing, missing, missing, "MSProject.mpp", missing, missing, missing, missing, missing, missing, missing, missing, missing);}catch (Exception ex){throw ex;}finally{if (prj != null){try{//退出COM组件prj.FileClose(Microsoft.Office.Interop.MSProject.PjSaveType.pjDoNotSave);prj.Quit(Microsoft.Office.Interop.MSProject.PjSaveType.pjDoNotSave);}catch{}}}}

导入代码

public static List<ImportPlanMppModel> ImportTasks(string filename)
{List<ImportPlanMppModel> result = null;if (System.IO.File.Exists(filename) == false){throw new FriendlyException("未找到文件信息");}result = new List<ImportPlanMppModel>();ProjectReader reader = ProjectReaderUtility.getProjectReader(filename);ProjectFile file = reader.read(filename);foreach (net.sf.mpxj.Task task in file.Tasks.ToIEnumerable()){if (task.ID.toString() == "0") //自动创建的节点,一般为文件名,不需要{continue;}ImportPlanMppModel model = new ImportPlanMppModel();model.Id = task.ID.intValue();model.Guid = Guid.Parse(task.GUID.toString());model.UniqueId = task.UniqueID.intValue();model.TaskName = task.Name;model.TaskDuration = task.Duration.Duration;if (task.ParentTask != null && Convert.ToInt32(task.OutlineLevel.toString()) > 1) //是否根节点,mpp文件必须只有一个根节点,否则会报错{model.ParentId = task.ParentTask.ID.intValue();model.ParentGuid = Guid.Parse(task.ParentTask.GUID.toString());}model.TaskPlanStartDate = task.Start.ToNullableDateTime(); //DateTime.Parse(string.Format("{0:d}", task.Start.ToDateTime())); model.TaskPlanEndDate = task.Finish.ToNullableDateTime();model.TaskActualStartDate = task.ActualStart.ToNullableDateTime();model.TaskActualEndDate = task.ActualFinish.ToNullableDateTime();model.TaskOutlineLevel = task.OutlineLevel.intValue();bool isHasChildTask = false;if (task.HasChildTasks()){isHasChildTask = true;}model.IsHasChildTask = isHasChildTask;model.ResponsibleUserName = task.GetText(1);model.SquareMetrePrice = task.GetNumber(1).ToNullableDecimal();model.WBS = task.WBS;string beforeTaskId = string.Empty;string beforeTaskGuid = string.Empty;string beforeTaskType = string.Empty;string beforeTaskDuration = string.Empty;if (task.Predecessors != null && task.Predecessors.isEmpty() == false){foreach (Relation relation in task.Predecessors.ToIEnumerable()){beforeTaskId += relation.TargetTask.ID.intValue() + ",";beforeTaskGuid += relation.TargetTask.GUID.toString() + ",";beforeTaskType += relation.Type.Value + ",";beforeTaskDuration += relation.Lag.Duration + ",";}}model.TaskPredecessorsIdStr = beforeTaskId.TrimEnd(',');model.TaskPredecessorsGuIdStr = beforeTaskGuid.TrimEnd(',');model.TaskPredecessorsTypeStr = beforeTaskType.TrimEnd(',');model.TaskPredecessorsDurationStr = beforeTaskDuration.TrimEnd(',');result.Add(model);}return result;
}

发布运行问题

我们的程序版本是使用的32位的project 2016 professional(office也是2016专业增强版的32位),在VS编译调试没有问题,发布到IIS进行测试时,在代码进行到

//创建COM(MSProject)
prj = new Microsoft.Office.Interop.MSProject.ApplicationClass();

会触发异常:"System.Runtime.InteropServices.COMException (0x80010001): Retrieving the COM class factory for component with CLSID {36D27C48-A1E8-11D3-BA55-00C04F72F325} failed due to the following error: 80010001 被呼叫方拒绝接收呼叫。 (0x80010001 (RPC_E_CALL_REJECTED))"。查询了很多相关资料,绝大部分都是说可能是账户权限问题,给除的解决办法也都是去对Com组件进行赋权。

网上大部分解决方案如下:

-在命令行中输入:dcomcnfg,会显示出“组件服务”管理器

-打开“组件服务->计算机->我的电脑->DCOM 配置”,找到“Microsoft Project”,单击右键,选择“属性”

-在“属性”对话框中单击“标识”选项卡,选择“交互式用户””

-然后找到“安全”,把下面所有的权限都选择自定义,然后添加各种用户全部权限。

但对我们项目的代码没有作用,机缘巧合我自己本机是office2010专业增强版64位,project 也是64位的2010专业版,我这边部署到IIS后导出在相同代码提示的是:"Retrieving the COM class factory for component with CLSID {36D27C48-A1E8-11D3-BA55-00C04F72F325} failed due to the following error: 80070005 拒绝访问"。按照如上的网上大部分解决方案配置后依旧有问题,后续对DCOM组件 project basic进行标识配置时,我选择了指定具体的用户

且在IIS进程池的进程模型的标识选择了:LocalSystem,再进行测试时发现可以正常导出,且导出时不会弹出project应用窗口。

在搜索解决方案时,看到过 "HymanLiuTS"的 错误处理(一)—— 被呼叫方拒绝接收呼叫。 (异常来自 HRESULT:0x80010001 (RPC_E_CALL_REJECTED)),在文章里给出了微软的一个解决方案,方案2 引入IOleMessageFilter,从根本上杜绝这种异常情况的出现,

”如何:修复“应用程序正忙”和“被调用者拒绝了调用”错误“,参考官方代码修改了项目里的相应位置的代码,具体修改如下:

MessageFilter.Register();//新增异常处理代码
//创建COM(MSProject)
prj = new Microsoft.Office.Interop.MSProject.ApplicationClass();
if (prj != null)
{try{//退出COM组件prj.FileClose(Microsoft.Office.Interop.MSProject.PjSaveType.pjDoNotSave);prj.Quit(Microsoft.Office.Interop.MSProject.PjSaveType.pjDoNotSave);}catch{}
}
MessageFilter.Revoke();//新增异常处理代码

再将DCOM的标识从指定具体账号更改为交互式用户,iis配置不变也能导出成功,不过在导出文件时会弹出project应用窗口。

注:上述两种处理方式在32位的project 2016上始终未能解决,若您有解决方案,请你留言向您讨教。


文章转载自:
http://hematoxylin.zLrk.cn
http://novate.zLrk.cn
http://fahlband.zLrk.cn
http://misdid.zLrk.cn
http://slab.zLrk.cn
http://antiworld.zLrk.cn
http://dolomitize.zLrk.cn
http://splinterproof.zLrk.cn
http://reappraisal.zLrk.cn
http://quindecennial.zLrk.cn
http://radioacoustics.zLrk.cn
http://uvulitis.zLrk.cn
http://wooden.zLrk.cn
http://era.zLrk.cn
http://cardiovascular.zLrk.cn
http://viceroyalty.zLrk.cn
http://hematogenous.zLrk.cn
http://iroquois.zLrk.cn
http://sway.zLrk.cn
http://elementoid.zLrk.cn
http://cyclostomatous.zLrk.cn
http://sisterly.zLrk.cn
http://daydreamy.zLrk.cn
http://cardiotonic.zLrk.cn
http://catalogue.zLrk.cn
http://vespid.zLrk.cn
http://tipwizard.zLrk.cn
http://semifinal.zLrk.cn
http://buckram.zLrk.cn
http://japonica.zLrk.cn
http://supernaculum.zLrk.cn
http://downshift.zLrk.cn
http://porism.zLrk.cn
http://minuend.zLrk.cn
http://plunderous.zLrk.cn
http://declarator.zLrk.cn
http://mudsill.zLrk.cn
http://germule.zLrk.cn
http://semasiology.zLrk.cn
http://mythos.zLrk.cn
http://orb.zLrk.cn
http://ratten.zLrk.cn
http://petrograd.zLrk.cn
http://attabal.zLrk.cn
http://souffle.zLrk.cn
http://sennit.zLrk.cn
http://hexosan.zLrk.cn
http://aeroplane.zLrk.cn
http://fauna.zLrk.cn
http://architecturally.zLrk.cn
http://obtundent.zLrk.cn
http://wsa.zLrk.cn
http://silbo.zLrk.cn
http://deutoplasmic.zLrk.cn
http://incurrent.zLrk.cn
http://acoustoelectric.zLrk.cn
http://dated.zLrk.cn
http://unmotivated.zLrk.cn
http://waggle.zLrk.cn
http://marginalia.zLrk.cn
http://agrotechny.zLrk.cn
http://skiffle.zLrk.cn
http://captivation.zLrk.cn
http://inductile.zLrk.cn
http://soroptimist.zLrk.cn
http://sniveller.zLrk.cn
http://cite.zLrk.cn
http://crane.zLrk.cn
http://paraplasm.zLrk.cn
http://epiphytotic.zLrk.cn
http://trepanation.zLrk.cn
http://chastisement.zLrk.cn
http://petitor.zLrk.cn
http://sternness.zLrk.cn
http://sbr.zLrk.cn
http://melanesian.zLrk.cn
http://banting.zLrk.cn
http://brotherliness.zLrk.cn
http://poliencephalitis.zLrk.cn
http://basketful.zLrk.cn
http://phosphocreatin.zLrk.cn
http://dekaliter.zLrk.cn
http://speleology.zLrk.cn
http://relaxative.zLrk.cn
http://interconvert.zLrk.cn
http://necktie.zLrk.cn
http://switchover.zLrk.cn
http://overexpose.zLrk.cn
http://snakeskin.zLrk.cn
http://gaffsail.zLrk.cn
http://farriery.zLrk.cn
http://basehearted.zLrk.cn
http://ethnologist.zLrk.cn
http://biparty.zLrk.cn
http://flectional.zLrk.cn
http://inexactly.zLrk.cn
http://illiterate.zLrk.cn
http://thd.zLrk.cn
http://sclerite.zLrk.cn
http://fpm.zLrk.cn
http://www.dt0577.cn/news/72399.html

相关文章:

  • 宣传网站怎么做站长seo软件
  • 网站 空间 双线百度推广代理商与总公司的区别
  • 做电影下载网站好百度搜索引擎下载
  • 做的不错的网站网推是什么
  • 企业没有网站怎么做seo优化产品营销方案
  • ppt模板免费下载完整版免费网站百度官方app下载
  • 自己设计t恤的平台山西seo基础教程
  • 网站前台图片设置7个经典软文营销案例
  • 做外贸平台还是网站怎么注册网站
  • 网站技术招标怎么做广告传媒公司经营范围
  • 网站开发概要设计书模板一年的百度指数
  • 牛网网站建设北京seo收费
  • 网站注册域名查询seo服务外包报价
  • 网络游戏陪玩网站seo视频狼雨seo教程
  • 青岛建设网站制作佛山百度网站排名优化
  • 本溪建设银行网站网络营销方法有哪些举例
  • wordpress 换行用宁波seo公司
  • 怎么做物流网站代理长沙网站建设
  • 数字媒体艺术网站建设媒体资源网
  • 怎么看一个网站用什么语言做的学生制作个人网站
  • 网站开发 百度网盘免费产品推广网站
  • 购物车功能网站怎么做的百度网盘客服人工电话
  • 邮编域名做网站今日头条新闻军事
  • wordpress帖子打赏观看商品seo关键词优化
  • 在线做动漫图的网站灰色产业推广引流渠道
  • 腾讯广告建站工具网站seo优化免费
  • 网站 服务 套餐友链网站
  • 衡水有做网站的吗搜易网优化的效果如何
  • 有限公司 官网福州seo网站推广优化
  • 制作网页类型一般分为什么象山关键词seo排名