简体   繁体   English

如何使用 C#、.NET 将文本写入 word 文件

[英]How to write text into a word file using C#, .NET

I am trying to write and append some text to a word file using c#, however, I am unable to get expected results.我正在尝试使用 c# 编写一些文本并将其附加到 word 文件中,但是,我无法获得预期的结果。 Could you please help me out of this ?你能帮我解决这个问题吗?

Below is my code-下面是我的代码-

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.IO;
    
    namespace WFA1
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                //FileStream F = new FileStream("testdoc2.docx", FileMode.OpenOrCreate, FileAccess.ReadWrite);
                Console.WriteLine("Sourav");           
                string filename = @"C:\\Desktop\\myfile.docx";
                Console.WriteLine(filename);
                try
                {
                    using (FileStream fs = File.OpenWrite(filename))
                    {
                        Byte[] content = new UTF8Encoding(true).GetBytes("Hello I am learning C#");
                        fs.Write(content, 0, content.Length);
                    }
                }
                catch (Exception Ex)
                {
                    Console.Write(e.ToString());
                }
                
    
    
            }
        }
    }

The above code is a windows form application code behind.上面的代码是一个windows窗体应用程序代码后面。 I have use FileStream class to write data.我已经使用 FileStream 类来写入数据。 However I am facing below issues :-但是我面临以下问题:-

  1. No file is getting created没有文件被创建
  2. Code keeps on running until I stop it manually.代码一直运行,直到我手动停止它。

Hence, I tried the below approach too, and I was able to write text to the file.因此,我也尝试了以下方法,并且能够将文本写入文件。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using Microsoft.Office.Interop.Word;

namespace WFA1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();
            Microsoft.Office.Interop.Word.Document doc = app.Documents.Open("C:\\Users\\SS5014874\\Desktop\\testdoc1.docx");
            object missing = System.Reflection.Missing.Value;
            //string s = "Hi";
            //Console.WriteLine(s);               
            doc.Content.Text = textBox1.Text.ToString();
            doc.Save();
            doc.Close(ref missing);

            app.Quit(ref missing);
        }
    }
}

However, still I did not get expected results.但是,我仍然没有得到预期的结果。 below are my issues:-以下是我的问题:-

  1. Unable to append any text.无法附加任何文本。 Please let me know how to append using this approach.请让我知道如何使用这种方法追加。 is there any method we can call to append texts.我们可以调用任何方法来附加文本吗?
  2. Even though I have used Quit method, application is not quitting, until I quit manually.即使我使用了 Quit 方法,应用程序也不会退出,直到我手动退出。

Also, where can I find the list of methods of class Microsoft.Office.Interop.Word另外,我在哪里可以找到Microsoft.Office.Interop.Word类的方法列表

Please let me know for any other information.请让我知道任何其他信息。

Please follow this link https://support.microsoft.com/en-us/kb/316384请点击此链接https://support.microsoft.com/en-us/kb/316384

Or或者

You can try this.你可以试试这个。

Add the following directives:添加以下指令:

  • using Microsoft.Office.Interop.Word;使用 Microsoft.Office.Interop.Word;

  • using System.Reflection;使用 System.Reflection;

For adding Microsoft.Office.Interop.Word;用于添加 Microsoft.Office.Interop.Word;

  • On the Project menu, click Add Reference.在项目菜单上,单击添加引用。
  • On the COM tab, locate Microsoft Word Object Library,and then Select.在 COM 选项卡上,找到 Microsoft Word 对象库,然后选择。

(In my case it is Microsoft Word 12.0 Object Library ) (在我的例子中是Microsoft Word 12.0 Object Library

Use these codes.使用这些代码。 I am trying to maintain these codes like your codes -我正在尝试像您的代码一样维护这些代码-

private void button1_Click(object sender, EventArgs e)
{
   Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();    
   Microsoft.Office.Interop.Word.Document doc = app.Documents.Open(@"e:\testdoc1.docx");
   object missing = System.Reflection.Missing.Value;                        
   doc.Content.Text += textBox1.Text;
   app.Visible = true;    //Optional
   doc.Save();            
   this.Close();           
}

Here you dynamically create word document and write simple content in it在这里您可以动态创建word文档并在其中写入简单的内容

  private async void btn_WriteIntoWord_Click(object sender, EventArgs e)
    {
        Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();
        Microsoft.Office.Interop.Word.Document doc; 
        try
        {
            object oMissing = System.Reflection.Missing.Value;

            object missing = System.Reflection.Missing.Value;
            lblProcessing.Text = "Writing File.. Please wait";
            int count=0;

            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                doc = app.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);
                doc.Content.Font.Size = 12;
                doc.Content.Font.Bold = 1;
                if (count != 0) doc.Content.Text = "Dear Team,";
                int innercount = 0;
                foreach (DataGridViewCell cell in row.Cells)
                {
                    innercount++;

                    if (count != 0)
                    {
                        if (cell.Value != null)
                        {

                            await Task.Delay(1);
                            string value = cell.Value.ToString();
                            switch(innercount)
                            {
                                case 1:
                                     doc.Content.Text += "          EC Name: " + value;
                                    break;
                                case 2:
                                     doc.Content.Text += "          SO#: " + value;
                                    break;
                                case 3:
                                    doc.Content.Text += "           Monthly Hire Rate: " + value.Trim();
                                    break;
                                case 4:
                                    doc.Content.Text += "           Bill amount: " + value.Trim();
                                    break;
                                case 5:
                                    doc.Content.Text += "           Project code: " + value;
                                    break;
                                case 6:
                                    doc.Content.Text += "           Line Text: " + value;
                                    break;
                                case 7:
                                    doc.Content.Text += "           Total WD: " + value;
                                    break;
                                case 8:
                                    doc.Content.Text += "           #NPL: " + value;
                                    break;
                                case 9:
                                    doc.Content.Text += "           Project%: " + value;
                                    break;
                                case 10:
                                    doc.Content.Text += "           Remark: " + value;
                                    break;
                                case 11:
                                    doc.Content.Text += "           ALCON Emp ID: " + value;
                                    break;
                                default:
                                    doc.Content.Text += value;
                                    break;

                            }



                        }

                    }
                }

                if (count != 0)
                {
                    doc.Content.Text += "Thanks,";
                    doc.Content.Text += "NCS team";
                    string filecount = "test" + count.ToString() + ".docx";
                    object filename = @"D:\GenerateEmail\EmailBillingRates\EmailBillingRates\Word\" + filecount;
                    doc.SaveAs2(ref filename);
                    doc.Save();
                    doc.Close();
                }
                if (count == 10)
                    break;
                count++;
            }

            app.Visible = true;    //Optional

            lblProcessing.Text = "";
           // MessageBox.Show("File Saved successfully");
            this.Close();

        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            Marshal.ReleaseComObject(app);
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM