C#对word、excel、pdf等格式文件的操作总结
一、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文档
相关文章
- Visual C#之核心语言
- 【目录】C#操作Excel组件Spire.XLS系列文章目录
- C# Microsoft.Office.Interop.Owc11 导出excel文件
- C#读取Excel五种方式的体会
- C#将数据以XML格式写入Excel
- C#Redis 常用key操作
- Win10系列:C#应用控件基础15
- A2D JS框架 - DES加密解密 与 Cookie的封装(C#与js互相加密解密)
- C#通过XML导出Excel
- C#项目中操作Excel文件——使用NPOI库
- C#项目中操作Excel文件——使用NPOI库
- C#.net word excel powerpoint (ppt) 转换成 pdf 文件
- [C#]Main(String[] args)参数输入问题
- C# 获取Excel工作薄中Sheet页(工作表)名集合
- C# 读取Excel中的数据
- C#中有关资源、BeginInvoke, Invoke和事件的事情
- 【转】教你用C#读写、删除、更新excel表格记录
- C# WinForm多线程开发(一) Thread类库
- C# Static
- C# 读取Excel中的数据
- 国内第一部C#.Net调用Matlab混合编程视频教程
- Atitit.excel导出 功能解决方案 php java C#.net版总集合.doc
- (二十五)c#Winform自定义控件-有确定取消的窗体(一)-HZHControls
- 一个操作EXCEL的C#类ExcelUtils
- 前端必备技能知识:JS导出Blob流文件为Excel表格、Vue.js使用Blob的方式实现excel表格的下载(流文件下载)
- JAVA操作Excel表格:方法二:POI的使用①:Excel实战之POI创建excel文件(低版本)
- JAVA操作Excel表格:方法一:jxl的使用①:Excel实战之JXL创建excel文件
- Excel 2016 突然打开别人发过来的2个excel文件就关闭打不开,打开电脑上其他excel文件正常
- [C#] 使用ClosedXML导出excel(且设置其带有时间戳的导出名字)