zoukankan      html  css  js  c++  java
  • 一篇比较好的对office 操作的文章


     using System;
    using System.Data;
    using System.Drawing;
    using System.Data.SqlClient;
    using Excel;
    using Word;
    using System.IO;
    namespace Common
    {
     
    /// <summary>
     
    /// 把数据导入到.doc、.txt、.xls文件中
     
    /// </summary>

     public class Export
     
    {
      
    private const string DATAWORDPATH = @"C:\folder\doc\datadoc\";
      
    private const string IMAGEWORDPATH = @"C:\folder\doc\imagedoc\";
      
    private const string IMAGEPATH = @"C:\folder\image\";
      
    private const string EXCELPATH = @"C:\folder\excel\";
      
    private const string TXTPATH = @"C:\folder\txt\";
      
    private const string IMAGEPOSTFIX = ".bmp";
      
    private const string WORDPOSTFIX = ".doc";
      
    private const string EXCELPOSTFIX = ".xls";
      
    private const string TXTPOSTFIX = ".txt";
      
    private const int DATADISTANCE = 5;
      
    private const int TABDISTANCE = 8;
      
      
    public Export()
      
    {
       
    //
       
    // TODO: 在此处添加构造函数逻辑
       
    //
      }


      
    /// <summary>
      
    /// 获得数据集Dataset--------------------------------用于调试
      
    /// </summary>
      
    /// <returns>Dataset</returns>

      public DataSet GetData()
      
    {
       
    try
       
    {
        
    string sConnectionString;
        sConnectionString 
    = "workstation id=GUOFU;packet size=4096;user id=sa;data source=GUOFU;persist security info=True;initial catalog=YC;password=sc";
        SqlConnection objConn 
    = new SqlConnection(sConnectionString);
        objConn.Open();                                            
        SqlDataAdapter daPoint 
    = new SqlDataAdapter("Select * From Point", objConn);
        DataSet dsYC 
    = new DataSet("YC");
        daPoint.FillSchema(dsYC,SchemaType.Mapped, 
    "Point");
        daPoint.Fill(dsYC,
    "Point");
        daPoint 
    = new SqlDataAdapter("Select * From Employee", objConn);
        daPoint.FillSchema(dsYC,SchemaType.Mapped, 
    "Employee");
        daPoint.Fill(dsYC,
    "Employee");
        
    return dsYC;
       }

       
    catch(Exception ex)
       

        
    throw new Exception(ex.Message);
       }


      }


      
    /// <summary>
      
    /// 把数据文件导入到.xls文件
      
    /// </summary>
      
    /// <param name="ds"></param>

      public void ExportToExcel(DataSet ds)
      
    {

       
    if(ds.Tables.Count!=0)
       
    {
        
    //生成.xls文件完整路径名
        string tempFileName = GetTempFileName();
        
    object filename = EXCELPATH+tempFileName+EXCELPOSTFIX;
        
    object Nothing = System.Reflection.Missing.Value;
        
        
    //创建excel文件,文件名用系统时间生成精确到毫秒
        Excel.Application myExcel = new Excel.ApplicationClass();
        myExcel.Application.Workbooks.Add(Nothing);

        
    try
        
    {
         
    //把Dataset中的数据插入excel文件中
         int totalCount = 0;
         
    for(int k =0;k<ds.Tables.Count;k++)
         
    {
          
    int row = ds.Tables[k].Rows.Count;
          
    int column = ds.Tables[k].Columns.Count;
        
          
    for(int i = 0;i<column;i++)
          
    {
           myExcel.Cells[totalCount
    +2,1+i] = ds.Tables[k].Columns[i].ColumnName;
          }


          
    for(int i = 0;i<row;i++)
          
    {
           
    for(int j =0;j<column;j++)
           
    {
            myExcel.Cells[totalCount
    +3+i,1+j] = "'" + ds.Tables[k].Rows[i][j].ToString();
           }

          }

          totalCount 
    = totalCount + row +4;
         }


         
    try
         
    {
          
    //保存excel文件到指定的目录下,文件名用系统时间生成精确到毫秒
          myExcel.ActiveWorkbook._SaveAs(filename,Nothing,Nothing,Nothing,Nothing,Nothing,XlSaveAsAccessMode.xlExclusive,Nothing,Nothing,Nothing,Nothing);
         }

         
    catch
         
    {
          System.Windows.Forms.MessageBox.Show(
    "系统找不到指定目录下的文件:  "+EXCELPATH+tempFileName+EXCELPOSTFIX);
          
    return;
         }

         
    //让生成的excel文件可见
         myExcel.Visible = true;
        }

        
    catch(Exception e)
        
    {
         System.Windows.Forms.MessageBox.Show(
    "向excel文件中写入数据出错:  " + e.Message);
        }

       }

       
    else
       
    {
        System.Windows.Forms.MessageBox.Show(
    "No Data");
       }

      }



      
    /// <summary>
      
    /// 把数据导入到.doc文件
      
    /// </summary>
      
    /// <param name="ds"></param>

      public void ExportToWord(DataSet ds)
      
    {
       
    if(ds.Tables.Count!=0)
       
    {   
        
    string tempFileName = null;
        
    object filename = null;
        
        
    object tableBehavior = Word.WdDefaultTableBehavior.wdWord9TableBehavior;
        
    object autoFitBehavior = Word.WdAutoFitBehavior.wdAutoFitFixed;

        
    object unit = Word.WdUnits.wdStory;
        
    object extend = System.Reflection.Missing.Value;
        
    object breakType = (int)Word.WdBreakType.wdSectionBreakNextPage;

        
    object count = 1;
        
    object character = Word.WdUnits.wdCharacter;

        
    object Nothing =  System.Reflection.Missing.Value;
        
        
    try
        
    {
         tempFileName 
    = GetTempFileName();

         
    //生成.doc文件完整路径名
         filename = DATAWORDPATH+tempFileName+WORDPOSTFIX;
         
         
    //创建一个word文件,文件名用系统时间生成精确到毫秒
         Word.Application myWord= new Word.ApplicationClass();
         Word._Document myDoc 
    = new Word.DocumentClass();
         myDoc 
    = myWord.Documents.Add(ref Nothing,ref Nothing,ref Nothing,ref Nothing); 
         myDoc.Activate();

         
    //向把dataset中的表插入到word的文件中
        
         
    for(int totalTable = 0;totalTable<ds.Tables.Count;totalTable++)
         
    {
          myWord.Application.Selection.TypeText(ds.Tables[totalTable].TableName
    +"表的数据如下");
          myWord.Application.Selection.TypeParagraph();     
          myWord.Application.Selection.TypeParagraph();
          Word.Range para 
    = myWord.Application.Selection.Range;
          myDoc.Tables.Add(para,ds.Tables[totalTable].Rows.Count
    +1,ds.Tables[totalTable].Columns.Count,ref tableBehavior,ref autoFitBehavior);
          
    for(int column = 0; column<ds.Tables[totalTable].Columns.Count;column++)
          
    {
           myDoc.Tables.Item(totalTable
    +1).Cell(1,column+1).Range.InsertBefore(ds.Tables[0].Columns[column].ColumnName.Trim());
          }
        
          
    for(int row = 0;row<ds.Tables[totalTable].Rows.Count;row++)
          
    {
           
    for(int column = 0;column<ds.Tables[totalTable].Columns.Count;column++)
           
    {
            myDoc.Tables.Item(totalTable
    +1).Cell(row+2,column+1).Range.InsertBefore(ds.Tables[totalTable].Rows[row][column].ToString().Trim());
           }

          }

          myWord.Application.Selection.EndKey(
    ref unit,ref extend);
          myWord.Application.Selection.TypeParagraph();
          myWord.Application.Selection.TypeParagraph();
          myWord.Application.Selection.InsertBreak(
    ref breakType);    
         }

         myWord.Application.Selection.TypeBackspace();
         myWord.Application.Selection.Delete(
    ref character,ref count);
         myWord.Application.Selection.HomeKey(
    ref unit,ref extend);
        
         
    //保存word文件到指定的目录下
         try
         
    {
          myDoc.SaveAs(
    ref filename,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing);
          myWord.Visible 
    = true;
         }

         
    catch
         
    {
          System.Windows.Forms.MessageBox.Show(
    "系统找不到指定目录下的文件:  "+DATAWORDPATH+tempFileName+WORDPOSTFIX);
          
    return;
         }

         
    //让生成的excel文件可见
         myWord.Visible = true;
        }

        
    catch(Exception ex)
        
    {
         System.Windows.Forms.MessageBox.Show(
    "向word文件中写入数据出错:  " + ex.Message);
        }

       }

       
    else
       
    {
        System.Windows.Forms.MessageBox.Show(
    "No Data");
       }

      }

      
    /// <summary>
      
    /// 把图片文件导入到.doc文件
      
    /// </summary>
      
    /// <param name="bp"></param>

      public void ExportToWord(Bitmap bp)
      
    {
       
    string tempFileName = null;
       
    string bmpPath = null;
       
    object filename = null;
       
    object Nothing = null;
       tempFileName 
    = GetTempFileName();

     
       
    //生成.bmp文件完整路径名
       bmpPath = IMAGEPATH+tempFileName+IMAGEPOSTFIX;

       
    //生成.doc文件完整路径名
       filename = IMAGEWORDPATH+tempFileName+WORDPOSTFIX;
       Nothing 
    = System.Reflection.Missing.Value;
     
       
    //创建一个word文件,文件名用系统时间生成精确到毫秒
       Word.Application myWord= new Word.ApplicationClass();
       Word._Document myDoc 
    = new Word.DocumentClass();
       myDoc 
    = myWord.Documents.Add(ref Nothing,ref Nothing,ref Nothing,ref Nothing);  

       
    try
       
    {
        
    //把bitmap对象保存到系统所生成文件完整路径中
        bp.Save(bmpPath);
       }

       
    catch
       
    {
        System.Windows.Forms.MessageBox.Show(
    "系统找不到指定目录下的文件:  "+bmpPath);
        
    return;
       }

      
       
    try
       
    {
        
    //往word文件中插入图片
        myDoc.InlineShapes.AddPicture(bmpPath,ref Nothing,ref Nothing,ref Nothing);
       }

       
    catch
       
    {
        System.Windows.Forms.MessageBox.Show(
    "系统找不到指定目录下的文件:  "+bmpPath);
        
    return;
       }

      
       
    try
       
    {
        
    //保存word文件到指定的目录下
        myDoc.SaveAs(ref filename,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing);
       }

       
    catch
       
    {
        System.Windows.Forms.MessageBox.Show(
    "系统找不到指定目录下的文件:  "+IMAGEWORDPATH+tempFileName+WORDPOSTFIX);
        
    return;
       }


       
    //让生成的word文件可见
       myWord.Visible = true;
      }



      
    /// <summary>
      
    /// 把数据文件导入到.txt文件
      
    /// </summary>
      
    /// <param name="ds"></param>

      public void ExportToTxt(DataSet ds)
      
    {

       
    if(ds.Tables.Count!=0)
       
    {
        
    string tempFileName = null;
        tempFileName 
    = GetTempFileName();

      
        
    //创建一个.txt文件,文件名用系统时间生成精确到毫秒
        FileInfo file = new FileInfo(TXTPATH+tempFileName+TXTPOSTFIX);
        StreamWriter textFile 
    = null;
        
    try
        
    {
         textFile 
    = file.CreateText();
        }

        
    catch
        
    {
         System.Windows.Forms.MessageBox.Show(
    "系统找不到指定目录下的文件:  "+TXTPATH+tempFileName+TXTPOSTFIX);
         
    return;
        }
     

        
    //把Dataset中的数据写入.txt文件中
        for(int totaltable = 0;totaltable<ds.Tables.Count;totaltable++)
        
    {
         
    //统计dataset中当前表的行数
         int row = ds.Tables[totaltable].Rows.Count;

         
    //统计dataset中当前表的列数
         int column = ds.Tables[totaltable].Columns.Count;

         
    //用于统计当前表中每列记录中字符数最长的字符串的长度之和
         int totalLength = 0;

         
    //用于统计标题的长度(dataset中的表名的length+"表的数据如下"的length)
         int titleLength = 0;

         
    //统计每列记录中字符数最长的字符串的长度
         int[] columnLength = new int[column];
         
    for(int i = 0;i<column;i++)
         
    {
          columnLength[i] 
    = ds.Tables[totaltable].Columns[i].ColumnName.ToString().Length;
         }

         
    for(int i = 0;i<row;i++)
         
    {
          
    for(int j = 0;j<column;j++)
          
    {
           
    if(ds.Tables[totaltable].Rows[i][j].ToString().Length>columnLength[j])
           
    {
            columnLength[j]
    =ds.Tables[totaltable].Rows[i][j].ToString().Length;
           }

          }

         }



         
    //统计当前表中每列记录中字符数最长的字符串的长度之和
         for(int i = 0;i<column;i++)
         
    {
          totalLength 
    = totalLength+columnLength[i]+DATADISTANCE;
         }

         totalLength 
    = totalLength+2*TABDISTANCE-DATADISTANCE;

         
    //统计标题的长度(dataset中的当前表名的length+"表的数据如下"的length)
         titleLength = ds.Tables[totaltable].TableName.ToString().Length+"表的数据如下".Length*2;

         
    //把标题写入.txt文件中
         for(int i = 0;i<(int)((totalLength-titleLength)/2);i++)
         
    {
          textFile.Write(
    ' ');
         }

         textFile.Write(ds.Tables[totaltable].TableName
    +"表的数据如下");
         textFile.WriteLine();
         
    for(int i = 0;i<totalLength;i++)
         
    {
          textFile.Write(
    '*');
         }

         textFile.WriteLine();
         textFile.Write(
    "\t");

         
    //把dataset中当前表的字段名写入.txt文件中
         for(int i = 0;i<column;i++)
         
    {
          textFile.Write(ds.Tables[totaltable].Columns[i].ColumnName.ToString());
          
    for(int k = 0;k<columnLength[i]-ds.Tables[totaltable].Columns[i].ColumnName.ToString().Length+DATADISTANCE;k++)
          
    {
           textFile.Write(
    ' ');
          }

         }

         textFile.WriteLine();
         
    for(int i = 0;i<totalLength;i++)
         
    {
          textFile.Write(
    '-');
         }

         textFile.WriteLine();
         textFile.Write(
    "\t");

         
    //把dataset中当前表的数据写入.txt文件中
         for(int i = 0;i<row;i++)
         
    {
          
    for(int j = 0;j<column;j++)
          
    {
           textFile.Write(ds.Tables[totaltable].Rows[i][j].ToString());
           
    for(int k = 0;k<columnLength[j]-ds.Tables[totaltable].Rows[i][j].ToString().Length+DATADISTANCE;k++)
           
    {
            textFile.Write(
    ' ');
           }

          }

          textFile.WriteLine();
          textFile.Write(
    "\t");
         }

         textFile.WriteLine();
         
    for(int i = 0;i<totalLength;i++)
         
    {
          textFile.Write(
    '-');
         }

         textFile.WriteLine();
         textFile.WriteLine();
         textFile.WriteLine();
        }


        
    //关闭当前的StreamWriter流
        textFile.Close();
        System.Windows.Forms.MessageBox.Show(
    "数据文件已保存到"+"   "+file.FullName);                 
       }

       
    else
       
    {
        System.Windows.Forms.MessageBox.Show(
    "No Data");
       }

      }


      
    public string GetTempFileName()
      
    {
       
    return DateTime.Now.ToString("yyyyMMddhhmmssfff");
      }

     }

    }


    补充:使用以上方法必须对dcom进行配置,给用户使用office的权限。 
    具体配置方法如下: 
    1:在服务器上安装office的Excel软件. 
    2:在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务" 
    3:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置" 
    4:在"DCOM配置"中找到"Microsoft Excel 应用程序",在它上面点击右键,然后点击"属性",弹出"Microsoft Excel 应用程序属性"对话框 
    5:点击"标识"标签,选择"交互式用户" 
    6:点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加一个"NETWORK SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动""本地激活"权限. 
    7:依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK SERVICE"用户,然后赋予"本地访问"权限. 
    这样,我们便配置好了相应的Excel的DCOM权限. 
    注意:我是在WIN2003上配置的,在2000上,是配置ASPNET用户 

    若不进行配置会出现错误 
    检索 COM 类工厂中 CLSID 为 
    {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。 
    原因是用户没有使用Excel的权限。 
    导出到word同样要配置使用word的权限。  
    继续补充: 导出到txt我用了上面的方法有问题, 
    try 

    textFile 
    = file.CreateText(); 
    }
     
    catch 

    System.Windows.Forms.MessageBox.Show(
    "系统找不到指定目录下的文件: "+TXTPATH+tempFileName+TXTPOSTFIX); 
    return
    }
     


  • 相关阅读:
    浅谈if __name__='__main__'
    python打开文件方式
    关于ValueError: not enough values to unpack (expected 4, got 1)
    一篇文章让你搞懂this
    Cannot read property 'addEventListener' of null报错的解决办法
    看JS操作符中二进制补码
    js的原型和原型链理解
    你不知道的js中对象,数组互相转换
    浅谈js中a+++a与a+a++值区别
    Integer跟int的区别
  • 原文地址:https://www.cnblogs.com/meiproject/p/1064857.html
Copyright © 2011-2022 走看看