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文档


目录
相关文章
|
12天前
|
人工智能 编解码 文字识别
OCRmyPDF:16.5K Star!快速将 PDF 文件转换为可搜索、可复制的文档的命令行工具
OCRmyPDF 是一款开源命令行工具,专为将扫描的 PDF 文件转换为可搜索、可复制的文档。支持多语言、图像优化和多核处理。
140 17
OCRmyPDF:16.5K Star!快速将 PDF 文件转换为可搜索、可复制的文档的命令行工具
|
7天前
|
文字识别 BI
【图片型PDF】批量识别扫描件PDF指定区域局部位置内容,将识别内容导出Excel表格或批量改名文件,基于阿里云OCR对图片型PDF识别改名案例实现
在医疗和政务等领域,图片型PDF文件(如病历、报告、公文扫描件)的处理需求广泛。通过OCR技术识别这些文件中的文字信息,提取关键内容并保存为表格,极大提高了信息管理和利用效率。本文介绍一款工具——咕嘎批量OCR系统,帮助用户快速处理图片型PDF文件,支持区域识别、内容提取、导出表格及批量改名等功能。下载工具后,按步骤选择处理模式、进行区域采样、批量处理文件,几分钟内即可高效完成数百个文件的处理。
49 8
|
28天前
|
机器学习/深度学习 人工智能 文字识别
Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式
Zerox 是一款开源的本地化高精度OCR工具,基于GPT-4o-mini模型,支持PDF、DOCX、图片等多种格式文件,能够零样本识别复杂布局文档,输出Markdown格式结果。
113 4
Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式
|
2月前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
234 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
2月前
|
人工智能 文字识别 数据挖掘
MarkItDown:微软开源的多格式转Markdown工具,支持将PDF、Word、图像和音频等文件转换为Markdown格式
MarkItDown 是微软开源的多功能文档转换工具,支持将 PDF、PPT、Word、Excel、图像、音频等多种格式的文件转换为 Markdown 格式,具备 OCR 文字识别、语音转文字和元数据提取等功能。
335 9
MarkItDown:微软开源的多格式转Markdown工具,支持将PDF、Word、图像和音频等文件转换为Markdown格式
|
2月前
|
JavaScript
jquery图片和pdf文件预览插件
EZView.js是一款jquery图片和pdf文件预览插件。EZView.js可以为图片和pdf格式文件生成在线预览效果。支持的文件格式有pdf、jpg、 png、jpeg、gif。
75 16
|
4月前
|
Java Apache Maven
将word文档转换成pdf文件方法
在Java中,将Word文档转换为PDF文件可采用多种方法:1) 使用Apache POI和iText库,适合处理基本转换需求;2) Aspose.Words for Java,提供更高级的功能和性能;3) 利用LibreOffice命令行工具,适用于需要开源解决方案的场景。每种方法都有其适用范围,可根据具体需求选择。
|
4月前
|
Java Apache Maven
Java将word文档转换成pdf文件的方法?
【10月更文挑战第13天】Java将word文档转换成pdf文件的方法?
1277 1
|
4月前
|
索引 Python
PDF文件页面提取操作小指南
PDF文件页面提取操作小指南
132 4
|
4月前
|
Python
Python对PDF文件页面的旋转和切割
Python对PDF文件页面的旋转和切割
74 3

热门文章

最新文章