C#自带word COM保存docx文档时文件不兼容

本文详细介绍如何在项目中利用Word生成报表,包括添加Microsoft Word 14.0 Object Library组件,解决.doc与.docx格式转换的问题,以及提供代码示例实现文档的创建、保存和数据写入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做项目需要用到word生成报表,按照网上的方法,现在项目的引用里面添加COM组件: Microsoft Word 14.0 Object Library,会在引用下面自动添加
Microsoft.Office.Interop.Word;和Microsoft.Office.Core,
(一)doc和docx的区别:docx和doc的区别显著的一点就是体积大小的不同。当我们创建一个空的文档文件的时候,我们发现,doc格式是25KB左右,而docx是0字节。docx格式就是一个zip文件,我们可以拿winrar打开docx文件,得到一堆的文件,很类似android程序或者win7桌面窗体的源码,你在里面可以找到各种配置文件,文本文件和媒体文件。
(二)使用下面这个代码,可以保存.doc文档,但是保存.docx文档时,在SaveDocument(string filePath)的wordDoc.SaveAs(…)会报错:不兼容的文档。修改成wordDoc.SaveAs(ref fileName)就可以保存docx文档了,其实是跟format = WdSaveFormat.wdFormatDocument;这个格式有关,改成object format = WdSaveFormat.wdFormatDocumentDefault;就可以保存docx文档了,wordDoc.SaveAs(ref fileName)相当于使用这个默认格式。

object format = WdSaveFormat.wdFormatDocument; //保存格式 
object missing = System.Reflection.Missing.Value;
wordDoc.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);
class TransientReport
    {
        private _Application wordApp = null; //定义应用程序对象
        private _Document wordDoc = null;    
        public _Application Applicaton
        {
            get { return wordApp; }
            set { wordApp = value; }
        }
        /// <summary>
        /// 文档对象
        /// </summary>
        public _Document WordDoc
        {
            get { return wordDoc; }
            set { wordDoc = value; }
        }
        public TransientReport() { }

        /// <summary>
        /// 通过模板创建新文件
        /// </summary>
        /// <param name="filePath"></param>
        public void CreateNewDocument(string filePath)
        {
            killWnWordProcess();
            wordApp = new Application();
            wordApp.DisplayAlerts = WdAlertLevel.wdAlertsNone;
            wordApp.Visible = false;
            object missing = System.Reflection.Missing.Value;
            object templateName = filePath;
            wordDoc = wordApp.Documents.Open(ref templateName, 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, ref missing);
        }

        /// <summary>
        /// 另存为文件
        /// </summary>
        /// <param name="filePath"></param>
        public void SaveDocument(string filePath)
        {
            object fileName = filePath;
            object format = WdSaveFormat.wdFormatDocument; //保存格式
            object missing = System.Reflection.Missing.Value;
            wordDoc.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);
            //关闭wordDoc,wordApp对象
            object saveChanges = WdSaveOptions.wdSaveChanges;
            object originalFormat = WdOriginalFormat.wdOriginalDocumentFormat;
            object routeDocument = false;
            wordDoc.Close(ref saveChanges, ref originalFormat, ref routeDocument);
            wordApp.Quit(ref saveChanges, ref originalFormat, ref routeDocument);
        }

        /// <summary>
        /// 写数据
        /// </summary>
        /// <param name="ds"></param>
        public void writeWord(DataSet[] ds)
        {
            wordDoc.Content.Tables[1].Cell(1, 1).Range.Text = "123";
        }
     }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值