【问题标题】:Read word Doc. using c#阅读word文档。使用 c#
【发布时间】:2015-02-26 04:39:25
【问题描述】:

我创建了一个应用程序。富文本框中的文本存储在 word doc 中。使用 word interop dll。现在我想把 doc 这个词读回我的richtextbox。

我使用oDoc.Content.Text 阅读。它的工作,但对齐不存在。我需要在 word doc 中加载相同的 alingment。

我也使用了这段代码

oDoc.Activate();
oDoc.ActiveWindow.Selection.WholeStory();
oDoc.ActiveWindow.Selection.Copy()
IDataObject data = Clipboard.GetDataObject();
txtdocument.Text = Clipboard.GetDataObject()
       .GetData(DataFormats.Text).ToString();

但是它会抛出这个错误:

对象引用未设置为对象的实例。

【问题讨论】:

    标签: c# dll ms-word


    【解决方案1】:

    你的程序是单线程单元吗?如果不是,Clipboard 类将不起作用。

    Reference

    剪贴板类只能在设置为单线程单元 (STA) 模式的线程中使用。要使用此类,请确保您的 Main 方法标记有 STAThreadAttribute 属性。

    【讨论】:

    • 我试图设置 STAThreadAttribute 但它抛出了这个错误 无法设置指定的 COM 单元状态。
    • @jafrywilson:你用过System.Threading.Thread.CurrentThread.SetApartmentState吗?如果是这样,您需要在 Main() 减速之前添加 [STAThread]。
    • 我的方法是这个 [STAThread] private void ReadWordDoc() { Microsoft.Office.Interop.Word.ApplicationClass oWordApplic = new Microsoft.Office.Interop.Word.ApplicationClass();
    • string strFilePath = "D:\\wilson\\tms\\Documents\\IND2011-2012\\TB_CNR_IND_270520114946.doc";对象 objFile = strFilePath;对象缺失 = System.Reflection.Missing.Value;对象 objReadOnly = false;对象可见性 = true;
    • Microsoft.Office.Interop.Word.Document oDoc = oWordApplic.Documents.Open(ref objFile, ref 缺失, ref objReadOnly, ref 缺失, ref 缺失, ref 缺失, ref 缺失, ref 缺失, ref缺少,缺少参考,缺少参考,参考可见性,缺少参考,缺少参考,缺少参考,缺少参考); oDoc.Activate(); //txtdocument.Text = oDoc.Content.Text; oDoc.ActiveWindow.Selection.WholeStory(); oDoc.ActiveWindow.Selection.Copy(); Thread.CurrentThread.SetApartmentState(ApartmentState.STA);
    【解决方案2】:

    Clipboard.GetDataObject(); 可能会返回一个空引用,然后在最后一行您尝试访问它的成员

    txtdocument.Text = Clipboard.GetDataObject().GetData(DataFormats.Text).ToString();
    

    无论如何只是作为一个建议,为什么你不替换最后一行

    txtdocument.Text = Clipboard.GetDataObject().GetData(DataFormats.Text).ToString();
    

    用这个:

    txtdocument.Text = data.GetData(DataFormats.Text).ToString();
    

    编辑:检查您的变量 oDoc、txtDocument 或数据中的任何一个是否为空..

    新编辑:

    Thread tempThread = new Thread(new ThreadStart(threadstuff))
    tempThread.SetApartmentState(System.Threading.ApartmentState.STA);
    tempThread.Start();
    

    【讨论】:

    • 在这一行数据对象返回空值 IDataObject data = Clipboard.GetDataObject();
    • 这就是我的观点。这就是为什么它会抛出“对象引用未设置为对象的实例”错误。您能否显示您创建 Thread 的新实例并调用成员方法 SetApartmentState 的代码部分?
    • 对于上一个答案我回复了我的方法
    猜你喜欢
    • 2018-12-02
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    相关资源
    最近更新 更多