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文档
C#对word、excel、pdf等格式文件的操作总结的更多相关文章
- Word,Excel,pdf,txt等文件上传并提取内容
		
近期项目需求:1.要用到各种文件上传,下载. 2.并对文件进行搜索. 3.仅仅要文件里包括有搜索的内容,所有显示出来. 今天正好有时间整理一下,方便以后阅读,及对须要用到的朋友提供微薄之力.首先在实现 ...
 - 在线文档转换API word,excel,ppt等在线文件转pdf、png
		
在线文档转换API提供word,excel,ppt等在线文件转pdf.png等,文档:https://www.juhe.cn/docs/api/id/259 接口地址:http://v.juhe.cn ...
 - datatable导出到Word / Excel / PDF / HTML .NET
		
原文发布时间为:2011-01-21 -- 来源于本人的百度文章 [由搬家工具导入] IEnumerable - DataTable Export to Word / Excel / PDF / HT ...
 - word转pdf字体格式变乱的问题
		
完成word转pdf的功能之后,本地测试没问题,然后发布到服务器上,就遇到了字体变乱的问题,如下: 由于我本地发布后导出没有出现同样情况,而服务器和本地的最大区别在于字体库,于是,把服务器上关于需要用 ...
 - 2、Python djang 框架下的word Excel  TXT Image 等文件的下载
		
2.python实现文件下载 (1)方法一.直接用a标签的href+数据库中文件地址,即可下载.缺点:word excel是直接弹框下载,对于image txt 等文件的下载方式是直接在新页面打开. ...
 - Web方式预览Office/Word/Excel/pdf文件解决方案
		
最近在做项目时需要在Web端预览一些Office文件,经过在万能的互联网上一番搜索确定并解决了. 虽然其中碰到的一些问题已经通过搜索和自己研究解决了,但是觉得有必要将整个过程记录下来,以方便自己以后查 ...
 - 将Excel另存为CSV格式文件
		
直接将Excel另存为CSV,速度很快: $CurrentPath = $MyInvocation.MyCommand.Path.substring(0,$MyInvocation.MyCommand ...
 - Excel和CSV格式文件的不同之处
		
来源:https://blog.csdn.net/weixin_39198406/article/details/78705016 1.个人理解:为何选择使用csv来存储接口测试用例相关字段数据,而不 ...
 - 如何把Excel另存为XML格式文件(快速转换)
		
这时,我们尝试另存为另一种文件类型: XML电子表格2003(*.xml)
 
随机推荐
- 传微软欲收购Xamarin:未来有望通过VS开发iOS和Android应用?
			
据CRN报道,其援引匿名人士的消息称,微软将收购一家创建C#移动应用工具的公司或进行注资,并且谈判已经到了最终阶段.这家公司的名字叫做Xamarin,创建于2011年.对于微软来说,收购Xamarin ...
 - Hive权限介绍
			
一.开启权限 眼下hive支持简单的权限管理,默认情况下是不开启.这样全部的用户都具有同样的权限.同一时候也是超级管理员.也就对hive中的全部表都有查看和修改的权利,这样是不符合一般数据仓库的安全原 ...
 - android学习日记18--Adapter简介
			
一.Adapter 1.简述 最近学的GridView和Gallery 都有用到Adapter适配器,发现它貌似蛮重要的.专门上网搜了下有关Adapter的资料.android绝大多数应用是JAVA语 ...
 - careercup-中等难度 17.4
			
17.4 编写一个方法,找出两个数字中最大的那一个.不得使用if-else或其他比较运算符. 解法: 我们可以通过一步步的分析来将需要用到的if-else和比较操作符去掉: If a > b, ...
 - 根据字符串计算UILabel尺寸
			
iOS开发中经常会遇到UILabel大小尺寸不固定的情况,需要根据文字内容变化,这时候就需要计算文字大小以自动改变UILabel的尺寸. iOS7之后计算尺寸只需要一个方法就可以: - (CGSize ...
 - ios代理设计模式
			
代理设计模式的作用: 1.A对象监听B对象的一些行为,A成为B的代理 2.B对象想告诉A对象一些事情,A成为B的代理 代理设计模式的总结: 如果你想监听别人的一些行为,那么 ...
 - Fortify对移动应用安全的支持
			
Fortify对移动应用安全的支持http://www.docin.com/p-768827684.html
 - 【技巧】centos6.5_yum本地安装mysql
			
环境:centos6.5 .64位.mysql5.6.3 有鉴于此前在网上得来的Yum换源安装mysql,成功是可以成功,就是会受网速等影响,有时候会因为yum下载rpm包很慢以致超时失败. 而且考虑 ...
 - 关于Eclipse插件开发(四)-------给视图加下拉菜单和按钮和加入编辑器.
			
本例将给视图加入下拉菜单和按钮,同时再为列表添加一个右键菜单. 创建ActionGroup类 加入菜单和按钮的方法与SWT和JFace组件的一样,先创建一个ActionGroup代码如下: MyAct ...
 - 关于SQL语言的优化(Oracle)
			
SQL优化的原则 尽量使用列名 --SQL 优化2: where解析的顺序 : 右--> 左 Select * from zl_yhjbqk where dy_dj = '1K以下' ...