手头上的一个项目报表相对比较简单,所以报表打印采用VBA引擎,通过定制Word模版,然后根据模版需要填充数据,然后OK,打印即可。

  实现方法:首先需要引用VBA组建,我用的是Office2003 Professional,Dll版本号为Microsoft Word11.0

 另外当然还需要引用Interop.Word.Dll.

  代码如下:

///#region 打开Word文档,并且返回对象wDoc,wDoc
///
/// 打开Word文档,并且返回对象wDoc,wDoc
///
/// 完整Word文件路径+名称
/// 返回的Word.Document wDoc对象
/// 返回的Word.Application对象
public static void CreateWordDocument(string FileName,ref Word.Document wDoc,ref Word.Application WApp)
{
if(FileName == "") return;
Word.Document thisDocument = null;
Word.FormFields formFields = null;
Word.Application thisApplication = new Word.ApplicationClass();
thisApplication.Visible = true;
thisApplication.Caption = "";
thisApplication.Options.CheckSpellingAsYouType = false;
thisApplication.Options.CheckGrammarAsYouType = false;Object filename = FileName;
Object ConfirmConversions = false;
Object ReadOnly = true;
Object AddToRecentFiles = false;Object PasswordDocument = System.Type.Missing;
Object PasswordTemplate = System.Type.Missing;
Object Revert = System.Type.Missing;
Object WritePasswordDocument = System.Type.Missing;
Object WritePasswordTemplate = System.Type.Missing;
Object Format = System.Type.Missing;
Object Encoding = System.Type.Missing;
Object Visible = System.Type.Missing;
Object OpenAndRepair = System.Type.Missing;
Object DocumentDirection = System.Type.Missing;
Object NoEncodingDialog = System.Type.Missing;
Object XMLTransform = System.Type.Missing;try
{
Word.Document wordDoc =
thisApplication.Documents.Open(ref filename, ref ConfirmConversions,
ref ReadOnly, ref AddToRecentFiles, ref PasswordDocument, ref PasswordTemplate,
ref Revert,ref WritePasswordDocument, ref WritePasswordTemplate, ref Format,
ref Encoding, ref Visible, ref OpenAndRepair, ref DocumentDirection,
ref NoEncodingDialog, ref XMLTransform );thisDocument = wordDoc;
wDoc = wordDoc;
WApp = thisApplication;
formFields = wordDoc.FormFields;
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}}
#endregion调用上面静态方法,打开目标文件并且把DataGrid中数据填充到对应Word标签中去///#region Word填充数据(For Example)
///
/// Word填充数据
///
private void WordLoadData()
{
Word.Document wDoc=null;
Word.Application wApp=null;
sysFun.CreateWordDocument("E:\\监测报告(new).dot",ref wDoc,ref wApp);//对标签"C"进行填充
object bkmC="C";
if(wApp.ActiveDocument.Bookmarks.Exists("C") == true)
{
wApp.ActiveDocument.Bookmarks.get_Item
(ref bkmC).Select();
}
wApp.Selection.TypeText(this.txt1.Text);
object bkmG = "TWaterTable3";
object unit;
object count; //移动数
object extend;extend = Word.WdMovementType.wdExtend;
unit = Word.WdUnits.wdCell;
//把DataGrid中数据填充到标签TWaterTable3上
if(wApp.ActiveDocument.Bookmarks.Exists("TWaterTable3") == true)
{
wApp.ActiveDocument.Bookmarks.get_Item
(ref bkmG).Select();for(int i=0;i {
if(i==0)
{
count=1;
}
else
{
count=0;
}
//需填充5列数据
wApp.Selection.Move(ref unit,ref count);
wApp.Selection.TypeText(gridEX1.GetRow(i).Cells[0].Text);
count=1;wApp.Selection.Move(ref unit,ref count);
wApp.Selection.TypeText(gridEX1.GetRow(i).Cells[1].Text);wApp.Selection.Move(ref unit,ref count);
wApp.Selection.TypeText(gridEX1.GetRow(i).Cells[2].Text);wApp.Selection.Move(ref unit,ref count);
wApp.Selection.TypeText(gridEX1.GetRow(i).Cells[3].Text);wApp.Selection.Move(ref unit,ref count);
wApp.Selection.TypeText(gridEX1.GetRow(i).Cells[4].Text);
//换行
wApp.Selection.MoveRight(ref unit,ref count,ref extend);
}
}
}
#endregion然后就OK了,在对标签表控制要注意列循环和换行.C#操作Excel(导入导出)有很多朋友说需要C#导出到Excel的代码,现共享给大家///
/// 读取Excel文档
///
/// 文件名称
/// 返回一个数据集
public DataSet ExcelToDS(string Path)
{
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ Path +";"+"Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
string strExcel = "";
OleDbDataAdapter myCommand = null;
DataSet ds = null;
strExcel="select * from [sheet1$]";
myCommand = new OleDbDataAdapter(strExcel, strConn);
ds = new DataSet();
myCommand.Fill(ds,"table1");
return ds;
}///
/// 写入Excel文档
///
/// 文件名称
public bool SaveFP2toExcel(string Path)
{
try
{
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ Path +";"+"Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
System.Data.OleDb.OleDbCommand cmd=new OleDbCommand ();
cmd.Connection =conn;
//cmd.CommandText ="UPDATE [sheet1$] SET 姓名='2005-01-01' WHERE 工号='日期'";
//cmd.ExecuteNonQuery ();
for(int i=0;i {
if(fp2.Sheets [0].Cells[i,0].Text!="")
{
cmd.CommandText ="INSERT INTO [sheet1$] (工号,姓名,部门,职务,日期,时间) VALUES('"+fp2.Sheets [0].Cells[i,0].Text+ "','"+
fp2.Sheets [0].Cells[i,1].Text+"','"+fp2.Sheets [0].Cells[i,2].Text+"','"+fp2.Sheets [0].Cells[i,3].Text+
"','"+fp2.Sheets [0].Cells[i,4].Text+"','"+fp2.Sheets [0].Cells[i,5].Text+"')";
cmd.ExecuteNonQuery ();
}
}
conn.Close ();
return true;
}
catch(System.Data.OleDb.OleDbException ex)
{
System.Diagnostics.Debug.WriteLine ("写入Excel发生错误:"+ex.Message );
}
return false;
}这种方法是相当有效的。下附:VB.NET版实现word打开与关闭,有兴趣的朋友可以研究一下VB.NET实现word打开与关闭Imports Word'打开

Dim mWordapp As Word.Application 'word 应用程序

Dim mobjDoc As Word.Document 'word 文档

Dim fullFileName as string '文件路径

mWordapp = CreateObject("Word.Application")mobjDoc = mWordapp.Documents.Add(FullFileName)'关闭

Dim missing As Object = System.Reflection.Missing.ValuemWordapp.Application.Quit()If Not mobjDoc Is Nothing Then'垃圾回收

System.Runtime.InteropServices.Marshal.ReleaseComObject(mobjDoc)mobjDoc = NothingEnd IfIf Not mWordapp Is Nothing ThenSystem.Runtime.InteropServices.Marshal.ReleaseComObject(mWordapp)mWordapp = NothingEnd If'真正释放word进程

C#实现对Word文件读写[转]相关推荐

  1. EasyExcel实现对excel文件读写

    EasyExcel实现对excel文件读写 1.EasyExcel介绍 2.EasyExcel特点: 3.EasyExcel写操作 3.1 pom中引入xml相关依赖 3.2 创建实体类 3.3 实现 ...

  2. php代码实现对word文件的查找与替换,ThinkPHP5使用phpword实现文件模板字符替换

    PhpWord文档 想实现更多功能的朋友可以仔细参考文档 一.使用环境 目前是在ThinkPHP5.0.21中使用的PhpWord,其他使用环境引入方式可能会有一点不同. 使用composer安装,直 ...

  3. java poi读取word中附件_java用poi实现对word读取和修改操作

    java编程要实现对word的操作没有vb那种编程语言来得容易,得借助一些开源组件,其中就包括jacob.poi等, 而poi应用得最为广泛,对word2003和2007的读和写word操作都十分方便 ...

  4. java用poi实现对word读取和修改操作

    java编程要实现对word的操作没有vb那种编程语言来得容易,得借助一些开源组件,其中就包括jacob.poi等, 而poi应用得最为广泛,对word2003和2007的读和写word操作都十分方便 ...

  5. python对word文档内容进行批量替换_python 使用win32com实现对word文档批量替换页眉页脚...

    最近由于工作需要,需要将70个word文件的页眉页脚全部进行修改,在想到这个无聊/重复/没有任何技术含量的工作时,我的内心是相当奔溃的.就在我接近奔溃的时候我突然想到完全可以用python脚本来实现这 ...

  6. java代码实现对pdf文件文本和图片内容的提取

    教程 pom文件引入jar依赖 <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox --><depend ...

  7. java实现对rar文件和zip文件的解压缩

    java实现对rar文件和zip文件的解压缩 一.对zip文件的解压缩 1.1 使用ZIP4J实现 zip4j官方说明: Create, Add, Extract, Update, Remove fi ...

  8. ## 以下代码主要实现对Word PPT等批量转换为 PDF

    以下代码主要实现对Word PPT等批量转换为 PDF 可先百度查阅os库 import os import comtypes.clientdef get_path_word():pathpath = ...

  9. 修改html时webpack热更新,利用webpack实现对html文件的热更新

    webpack中webpack-dev-server是一个简单的web服务器,能够帮助咱们实现代码的热更新,即在实际开发中只需保存修改完后的代码,不用手动刷新页面就能够看到效果.在使用webpack- ...

最新文章

  1. java条件语句_Java条件语句
  2. LeetCode:2. Add Two Numbers
  3. ML之分类预测:分类预测评估指标之AUC计算的的两种函数具体代码案例实现
  4. oracle usenl,深入理解Oracle表(1):ORDERED和USE_NL | 学步园
  5. @EnableAspectAutoJAutoProxy_exposeProxy属性
  6. 解决ssh使用一段时间断开的问题
  7. C++学习之路,漫长而遥远
  8. 关于操作系统的学习总结
  9. 先进技术android,React Native实战(JavaScript开发iOS和Android应用)/计算机科学先进技术译丛...
  10. 安全测试===Mysql 注入练习网站(3)
  11. bash编程初体验之if
  12. LeetCode 28. Implement strStr()
  13. matlab编程求20的阶乘和,matlab编程求20的阶乘
  14. asymptotic (infinite-training-sample)
  15. 自考计算机离散数学,计算机及应用自考资料2014 10 离散数学02324.doc
  16. 某程序员披露华为外包员工现状:工作氛围好,没有歧视,但转正后也不算正式员工?...
  17. C#中获得汉字的首拼音(加强版)
  18. matlab离散系统的频率响应,离散系统频率响应和零极点分布实验报告
  19. python子图标题_python, 如何在subplot在总的图画上面加title?
  20. 计算机word教案设计,Word文档教学设计

热门文章

  1. Cannot initialize a parameter of type ‘NSArray<id<RCTBridgeModule>> *‘ with an rvalue of type ‘NSArr
  2. ligertree内容过多导致崩溃_师傅崩溃了!自身是8年的老师傅,料也没问题,但每次都堵管...
  3. 域名扫描工具Fierce
  4. 内存储器和cpu一起构成了计算机,计算机系统的组成
  5. python第一单元笔记_Python 初学笔记 - 第一章-列表
  6. 提高CocoaPods速度
  7. 科学家利用脑机接口让患者正常发声
  8. 清华大学微纳脑机接口与机器人实验室:生物材料研发工程师招聘
  9. 这个机器人一个表情,看过的人不寒而栗
  10. 腾讯新公开这张「图」,我看了眼,上面写满「智驾」二字