C#实现对Word、Excel等的模版定制

<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> C#实现对Word文件读写

        手头上的一个项目报表相对比较简单,所以报表打印采用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 ;
}

导出到Excel的时候,创建一个Excel文件

object misvalueExcel = System.Reflection.Missing.Value;
Excel.ApplicationClass exApp = new Excel.ApplicationClass();
exApp.DisplayAlerts = false;
Excel.Workbook book = exApp.Workbooks.Add(misvalueExcel);
book.SaveAs(fileName,misvalueExcel,misvalueExcel,misvalueExcel,misvalueExcel,misvalueExcel,Excel.XlSaveAsAccessMode.xlShared,misvalueExcel,misvalueExcel,misvalueExcel,misvalueExcel,misvalueExcel);
book.Close(misvalueExcel,misvalueExcel,misvalueExcel);
exApp.Quit();

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值