操作Word后台打印及保存时的问题

thoughter 2011-12-16 09:54:59
C#操作Word进行打印及保存
用printout方法进行打印,此时会提示“页边距设于可打印区域之外”(模板文件需要,不太好改模板)
请问这个提示有没有办法去掉
此外,在printout之后立即进行保存操作,此时会出错,提示“被呼叫方拒接接收呼叫”
怀疑与上面的打印提示有关,不知道是否是这个原因,请问该如何解决
写写
...全文
538 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
PerDign 2012-01-17
  • 打赏
  • 举报
回复
新人表示无力
thoughter 2012-01-12
  • 打赏
  • 举报
回复
http://115.com/file/e7zhimi7#
一个会产生此问题的word文档
thoughter 2012-01-09
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 sugarbelle 的回复:]

解决办法:

在Visual Studio 中点击菜单项“视图->解决方案资源管理器”,在其中点开“引用”文件夹,在"Microsoft.Office.Interop.Word" 上点击鼠标右键,选择“属性”,将属性中的“嵌入互操作类型”的值改为“false”即可。
[/Quote]
用ApplicationClass是没问题了
但是那个提示依然存在
sugarbelle 2012-01-08
  • 打赏
  • 举报
回复
解决办法:

在Visual Studio 中点击菜单项“视图->解决方案资源管理器”,在其中点开“引用”文件夹,在"Microsoft.Office.Interop.Word" 上点击鼠标右键,选择“属性”,将属性中的“嵌入互操作类型”的值改为“false”即可。
thoughter 2012-01-08
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 sugarbelle 的回复:]
ls说的没错.
c#操作word一般使用Microsoft.Office.Interop.Word.ApplicationClass类
[/Quote]
……
问题是声明private Microsoft.Office.Interop.Word.ApplicationClass wapp = null;的时候
就提示了
[Quote]
无法嵌入互操作类型“Microsoft.Office.Interop.Word.ApplicationClass”。请改用适用的接口。
[/Quote]

PS:引用了
[Quote]
Microsoft.Office.Core
Microsoft.Office.Interop.Word
[/Quote]

using Microsoft.Office.Interop.Word;
using Microsoft.Office.Interop;
using Microsoft.Office.Core;
sugarbelle 2012-01-08
  • 打赏
  • 举报
回复
ls说的没错.
c#操作word一般使用Microsoft.Office.Interop.Word.ApplicationClass类
thoughter 2012-01-05
  • 打赏
  • 举报
回复
ApplicationClass不行
Application是接口,还是得用这个
thoughter 2011-12-31
  • 打赏
  • 举报
回复

DocumentWriter doc = new DocumentWriter(TemplateFile);

for (i = 0; i < pc.Count; i++)
{
try
{
doc.Write("bm1", pc[i].xx);//具体代码关系不大,先不贴了
Application.DoEvents();
doc.QuickPrint();
Application.DoEvents();
doc.SaveAs(filename);//具体代码关系不大,先不贴了
}
catch (Exception e)
{
doc.CloseAll();
return -1;
}
Application.DoEvents();
}

doc.CloseAll();//这里出错


private void OpenDocument(string filename)
{
object FileName = filename;
wapp = new Microsoft.Office.Interop.Word.Application();
wapp.Visible = false;
wapp.DisplayAlerts = WdAlertLevel.wdAlertsNone;
if (!File.Exists(filename))
{
try
{
doc = wapp.Documents.Add(MissingObject, MissingObject, MissingObject, MissingObject);
_filename = filename;
}
catch
{
throw new FileNotFoundException("无效文件路径");
}
}
else
{
_filename = "";
doc = wapp.Documents.Open(ref FileName, ref MissingObject, ref ReadOnly, ref MissingObject, ref MissingObject, ref MissingObject, ref MissingObject, ref MissingObject, ref MissingObject,
ref MissingObject, ref MissingObject, ref Visible, ref MissingObject, ref MissingObject, ref MissingObject, ref MissingObject);
}
doc.Activate();
System.Windows.Forms.Application.DoEvents();
}

public void QuickPrint()
{
object Background = true;
doc.PrintOut(Background, MissingObject, MissingObject, MissingObject, MissingObject, MissingObject, MissingObject, MissingObject, MissingObject, MissingObject, MissingObject, MissingObject, MissingObject, MissingObject, MissingObject, MissingObject, MissingObject, MissingObject);
System.Windows.Forms.Application.DoEvents();
}

public void CloseAll()
{
if (wapp != null)
{
if (doc != null)
{
try
{
doc.Close(SaveChanges, MissingObject, MissingObject);
}
finally
{
doc = null;
}
}
try
{
if (wapp.Documents.Count == 0)
{
wapp.Quit(SaveChanges, MissingObject, MissingObject);
}
}
finally
{
wapp = null;
}
}
GC.Collect();
System.Windows.Forms.Application.DoEvents();
}
}
thoughter 2011-12-31
  • 打赏
  • 举报
回复
在连另一台打印机时运行完全正常
现在也只是多出一个正常的提示而已,不能算出错,只是没办法屏蔽

ApplicationClass我有时间试下

谢谢
cacoda 2011-12-31
  • 打赏
  • 举报
回复
c#操作word一般使用Microsoft.Office.Interop.Word.ApplicationClass类,你用的那个似乎是给vb/vb.net调用的,你确信你的代码可以正常运行?在我得印象中,Microsoft.Office.Interop.Word.Application在c#中会出错或者像你这样很奇怪的错误。
cacoda 2011-12-30
  • 打赏
  • 举报
回复
把你的代码贴上来
thoughter 2011-12-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cacoda 的回复:]

根据经验,DisplayAlert肯定有用,要不再试试看?
[/Quote]
实践过了啊,还能怎么试……

另外再补充一点,发现不是保存导致的出错,是最后关闭word时出的错
一开始是因为保存以及其他的填充、打印操作未能执行才以为是保存时出错的
最主要还是能屏蔽这个警告就好~
cacoda 2011-12-29
  • 打赏
  • 举报
回复
根据经验,DisplayAlert肯定有用,要不再试试看?
thoughter 2011-12-28
  • 打赏
  • 举报
回复
这么久了,难道没人能解决吗?
thoughter 2011-12-16
  • 打赏
  • 举报
回复
试了下,改application.DisplayAlert也没用
而且在另一台打印机上不会跳出可打印区域之外的提示,也就没有“被呼叫方拒接接收呼叫”的问题
所以最主要还是解决打印时跳出警告提示的问题
thoughter 2011-12-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hefeng_aspnet 的回复:]

http://blog.sina.com.cn/s/blog_66588a630100o30t.html
[/Quote]
谢谢,不过似乎没用,也是用printout打印的,其中的background我也设过了,没有用

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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