C#对word、excel、pdf等格式文件的操作总结

简介: 一、word这是我以前工作时写过的一个业务逻辑处理类,里面有不少文件操作的方法,这里主要关注一下C#对word的操作。

一、word

这是我以前工作时写过的一个业务逻辑处理类,里面有不少文件操作的方法,这里主要关注一下C#对word的操作。里面的方法可以直接拿出来用,主要是通过word的dot模版来进行创建word、替换word等操作。

namespace Excel2Word
{
    public class BLL
    {
        private Microsoft.Office.Interop.Word.Application app = null;//全局变量 word应用程序

        /// <summary>
        /// 从Excel中读取数据
        /// </summary>
        /// <param name="excelPath"></param>
        /// <param name="sheetName"></param>
        /// <returns></returns>
        public static DataSet GetDataFromExcel(string excelPath, string sheetName)
        {
            DataSet ds = new DataSet();
            string strConn = "Provider=Microsoft.Jet.OleDb.4.0; Data Source=" + excelPath.ToString().Trim() + "; Extended Properties=Excel 8.0;";

            try
            {
                using (OleDbConnection conn = new OleDbConnection(strConn))
                {
                    conn.Open();

                    OleDbDataAdapter oda = new OleDbDataAdapter("select * from [" + sheetName + "]", conn);
                    oda.Fill(ds);
                }
            }
            catch
            {
                throw new Exception("获取Excel数据时发生异常...");
            }
            return ds;
        }
      
        /// <summary>
        /// Word文本替换
        /// </summary>
        /// <param name="doc">文档</param>
        /// <param name="args">要替换的内容</param>
        public void ReplaceWord(Document doc, Dictionary<string, string> args)
        {
            try
            {
                object first = 0;
                object last = doc.Characters.Count;
                Range range = doc.Range(ref first, ref last);

                Microsoft.Office.Interop.Word.Find finder = range.Find;
                finder.ClearFormatting();

                object missingValue = Type.Missing;
                object replaceArea = Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll;

                foreach (var item in args)
                {
                    object findStr = "{" + item.Key.Trim() + "}";
                    object replaceStr = item.Value.Trim();

                    //替换内容
                    finder.Execute(ref findStr, ref missingValue, ref missingValue,
                      ref missingValue, ref missingValue, ref missingValue,
                      ref missingValue, ref missingValue, ref missingValue,
                      ref replaceStr, ref replaceArea, ref missingValue,
                      ref missingValue, ref missingValue, ref missingValue);
                }
            }
            catch
            {
                return;
            }
        }


        /// <summary>
        /// word文档资源释放
        /// </summary>
        /// <param name="doc">要释放资源的文档</param>
        public void DisposeWord(Document doc)
        {
            try
            {
                object oMissing = System.Reflection.Missing.Value;

                if (doc != null)
                {
                    //关闭Word并回收资源
                    doc.Close(ref oMissing, ref oMissing, ref oMissing);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
                    doc = null;
                }

                if (app != null)
                {
                    app.Quit(ref oMissing, ref oMissing, ref oMissing);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
                    app = null;
                    GC.Collect();
                }
            }
            catch
            {
                return;
            }
        }

        /// <summary>
        /// 从模板创建Word文件
        /// </summary>
        /// <param name="fileName">模板位置及名称</param>
        /// <returns></returns>
        public Document CreateWord(string fileName, string dsr)
        {
            try
            {
                app = new Microsoft.Office.Interop.Word.Application();//打开word程序
                Document doc = new Document();//创建word对象
                object unknow = Type.Missing;
                string date = DateTime.Now.ToShortDateString();
                object savefilename = @"D:\" + dsr + ".doc";//保存路径
                object File = fileName;
                app.Visible = false;//设置word程序为不可见
                doc = app.Documents.Open(ref File,
                ref unknow, ref unknow, ref unknow, ref unknow, ref unknow,
                ref unknow, ref unknow, ref unknow, ref unknow, ref unknow,
                ref unknow, ref unknow, ref unknow, ref unknow, ref unknow);//打开word文档

                doc.SaveAs(ref savefilename, ref unknow, ref unknow, ref unknow, ref unknow, ref unknow, ref unknow, ref unknow, ref unknow, ref unknow, ref unknow, ref unknow, ref unknow, ref unknow, ref unknow, ref unknow);//保存word文档

                return doc;
            }
            catch
            {
                return null;
            }
        }
    }
}

二、excel

webform中,导出excel的代码:

        public void ExportResult(DataTable dt, string excelName)
        {
            Response.Clear();
            Response.Charset = "";
            Response.ContentType = "applicationnd.ms-xls";
            StringWriter sw = new StringWriter();
            HtmlTextWriter htmlWrite = new HtmlTextWriter(sw);

            DataGrid dg = new DataGrid();
            dg.DataSource = dt;
            dg.DataBind();
            dg.RenderControl(htmlWrite);
            Response.AddHeader("content-disposition", "attachment;filename=" + HttpUtility.UrlEncode(excelName));
            Response.Write(sw.ToString());
            Response.End();
        }

如果遇到身份证等类型的字段,由于科学计数法的原因导出excel之后很可能会“截断”,因此有必要对这种长整型的字段进行处理。

        /// <summary>
        /// 过滤低位非打印字符
        /// </summary>
        /// <param name="tmp"></param>
        /// <returns></returns>
        private string ReplaceLowOrderASCIICharacters(string tmp)
        {
            StringBuilder info = new StringBuilder();
            foreach (char cc in tmp)
            {
                int ss = (int)cc;
                if (((ss >= 0) && (ss <= 8)) || ((ss >= 11) && (ss <= 12)) || ((ss >= 14) && (ss <= 32)))
                    info.AppendFormat(" ", ss);
                else info.Append(cc);
            }
            return info.ToString();
        }

winform中,客户端生成excel的代码:

前提是要安装office,原理是通过office进程生成excel文件。

        /// <summary>
        /// 从DataSet生成Excel
        /// </summary>
        /// <param name="ds">DataSet</param>
        /// <param name="strExcelFileName">文件名</param>
        public void ExportExcelByDataSet(DataSet ds, string strExcelFileName)
        {
            Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();

            int rowIndex = 1;
            int colIndex = 0;

            excel.Application.Workbooks.Add(true);

            DataTable dt = ds.Tables[0];
            foreach (DataColumn col in dt.Columns)
            {
                colIndex++;
                excel.Cells[1, colIndex] = col.ColumnName;
            }

            foreach (DataRow row in dt.Rows)
            {
                rowIndex++;
                colIndex = 0;

                foreach (DataColumn col in dt.Columns)
                {
                    colIndex++;
                    excel.Cells[rowIndex, colIndex] = row[col.ColumnName].ToString();
                }
            }

            excel.Visible = false;
            excel.ActiveWorkbook.SaveAs(strExcelFileName + ".XLS", Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel9795, null, null, false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, null, null, null, null, null);

            excel.Quit();
            excel = null;
            GC.Collect();
        }

三、pdf

搜索《PDF文件制作全攻略》,可以找到现成的资料,里面的代码和文档也相对比较齐全、清晰,这里简单做个示例demo——生成一个带章节的,内容为图片的pdf文档。

实现步骤:

1)在vs环境下新建项目,引用 ICSharpCode.SharpZipLib.dll、itextsharp.dll 这两个dll文件

2)在按钮事件下输入如下代码:

            //设置版面为A4大小
            Document document = new Document(PageSize.A4);

            //创建一个test.pdf文件
            PdfWriter.getInstance(document, new FileStream("test.pdf", FileMode.Create));

            document.Open();//打开pdf文档

            try
            {
                string[] images = Directory.GetFiles("test/");

                for (int i = 0; i < images.Length; i++)
                {
                    //定义章节
                    Chapter chapter = new Chapter(new Paragraph(images[i]), i + 1);

                    //加入章节
                    document.Add(chapter);

                    //获得图片
                    iTextSharp.text.Image tempImage = iTextSharp.text.Image.getInstance(images[i]);

                    //设置图片大小为原图的70%
                    tempImage.scalePercent(70);

                    //文档加入图片
                    document.Add(tempImage);

                    //文档新建一页
                    document.newPage();
                }


            }
            catch (Exception ex)
            {
                throw ex;
            }
            document.Close();//关闭pdf文档


目录
相关文章
|
1月前
|
Linux Python Windows
Python PDF文件转Word格式,只需要3秒(附打包)
Python PDF文件转Word格式,只需要3秒(附打包)
52 3
Python PDF文件转Word格式,只需要3秒(附打包)
|
19天前
|
C# 开发者 Windows
WPF遇上Office:一场关于Word与Excel自动化操作的技术盛宴,从环境搭建到代码实战,看WPF如何玩转文档处理的那些事儿
【8月更文挑战第31天】Windows Presentation Foundation (WPF) 是 .NET Framework 的重要组件,以其强大的图形界面和灵活的数据绑定功能著称。本文通过具体示例代码,介绍如何在 WPF 应用中实现 Word 和 Excel 文档的自动化操作,包括文档的读取、编辑和保存等。首先创建 WPF 项目并设计用户界面,然后在 `MainWindow.xaml.cs` 中编写逻辑代码,利用 `Microsoft.Office.Interop` 命名空间实现 Office 文档的自动化处理。文章还提供了注意事项,帮助开发者避免常见问题。
57 0
|
1月前
|
文字识别 C# Python
使用C#将几个Excel文件合并去重分类
使用C#将几个Excel文件合并去重分类
21 3
|
2月前
|
Web App开发 前端开发 安全
2024年新一代WebOffice内嵌网页组件,Web网页在线编辑Word/Excel/PPT
WebOffice控件面临兼容性、用户体验和维护难题。随着浏览器更新,依赖插件的技术不再适用,如Chrome不再支持NPAPI和PPAPI。产品普遍不支持多版本Office并存,定制能力弱,升级复杂。猿大师办公助手提供了解决方案,它兼容多种浏览器,包括最新版和国产浏览器,不依赖插件,支持文档对比,具有丰富的功能和接口,兼容多种Office版本,允许源码级定制,提供终身技术支持,并实现静默在线升级。适用于多种行业和操作系统。
109 2
|
1月前
|
开发框架 算法 .NET
C#使用MiniExcel导入导出数据到Excel/CSV文件
C#使用MiniExcel导入导出数据到Excel/CSV文件
41 0
VBA如何用Excel数据批量生成Word文档
VBA|用Excel数据批量生成并修改用模板创建的Word文档
|
2月前
|
Unix Linux Shell
Sphinx是一个Python文档生成工具,它可以解析reStructuredText或Markdown格式的源代码注释,并生成多种输出格式,如HTML、LaTeX、PDF、ePub等。
Sphinx是一个Python文档生成工具,它可以解析reStructuredText或Markdown格式的源代码注释,并生成多种输出格式,如HTML、LaTeX、PDF、ePub等。
|
3月前
|
C#
【C#】C#读写Excel文件
【C#】C#读写Excel文件
55 1
|
3月前
|
JSON API 开发工具
|
4月前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
163 3