Doc To RTF

来源:互联网 发布:mac 思维导图 知乎 编辑:程序博客网 时间:2024/05/01 06:08

using System;
using System.IO;
using System.Windows.Forms;
using Word = Microsoft.Office.Interop.Word;

namespace WinFormWord
{
    public partial class FormWord : Form
    {
        #region
        private Button docButton;
        private RichTextBox richText;
        private OpenFileDialog openFile;
        private readonly string tempFilePath = Path.GetTempFileName();
        #endregion

        #region Form1
        public FormWord()
        {
            InitializeComponent();
            docButton = new Button();
            docButton.Dock = DockStyle.Top;
            docButton.Text = "读取Word文档(*.doc;*.docx)";
            docButton.Click += new EventHandler(docButton_Click);
            this.Controls.Add(docButton);
            richText = new RichTextBox();
            richText.AllowDrop = true;
            richText.Dock = DockStyle.Fill;
            richText.DragEnter += new DragEventHandler(richText_DragEnter);
            this.Controls.Add(richText);
            richText.BringToFront();
            openFile = new OpenFileDialog();
            openFile.Filter = "Word 文档(*.doc;*.docx)|*.doc;*.docx";
            this.StartPosition = FormStartPosition.WindowsDefaultBounds;
        }
        #endregion

        #region richText_DragEnter
        private void richText_DragEnter(object sender, DragEventArgs e)
        {
            DataObject newData = e.Data as DataObject;
            if (richText.EnableAutoDragDrop = !newData.ContainsFileDropList())
                return;
            string filePath = newData.GetFileDropList()[0];
            if (Path.GetExtension(filePath).ToLowerInvariant().Contains(".doc"))
                DocToRTF(filePath);
        }
        #endregion

        #region DocToRTF
        private void DocToRTF(string filePath)
        {
            Word.Application newWord = new Word.Application();
            try
            {
                newWord.Visible = false;
                object readOnly = true;
                object fileName = filePath;
                object missing = Type.Missing;
                Word.Document doc = newWord.Documents.Open(ref fileName, ref missing, ref readOnly, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
                fileName = tempFilePath;
                object format = Word.WdSaveFormat.wdFormatRTF;
                doc.SaveAs(ref fileName, ref format, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
                doc.Close(ref missing, ref missing, ref missing);
                newWord.Quit(ref missing, ref missing, ref missing);
                richText.LoadFile(tempFilePath);
                this.Text = Path.GetFileName(filePath);
            }
            catch (Exception se)
            {
                MessageBox.Show(this, se.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            finally
            {
                newWord = null;
                GC.Collect();
            }
        }
        #endregion

        #region docButton_Click
        private void docButton_Click(object sender, EventArgs e)
        {
            if (openFile.ShowDialog(this) == DialogResult.OK)
                DocToRTF(openFile.FileName);
        }
        #endregion

        #region OnFormClosing
        protected override void OnFormClosing(FormClosingEventArgs e)
        {
            base.OnFormClosing(e);
            File.Delete(tempFilePath);
        }
        #endregion
    }
}