主要实现对指定Excel文件的打印(调用出打印预览这个的一个界面)

解决方案 »

  1.   

    upup,以前用vb写过,好像挺简单的
      

  2.   

    /// <summary>
      /// 将DataSet里所有数据导入Excel.
      /// 需要添加COM: Microsoft Excel Object Library.
      /// using Excel;
      /// </summary>
      /// <param name="filePath"></param>
      /// <param name="ds"></param>
      public static void ExportToExcel(string filePath, DataSet ds)
      {
       object oMissing = System.Reflection.Missing.Value;
       Excel.ApplicationClass xlApp = new Excel.ApplicationClass();
       try
       {
        // 打开Excel文件。以下为Office 2000.
        Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(filePath, oMissing, oMissing, oMissing, oMissing, oMissing, 
         oMissing, oMissing, oMissing, oMissing, oMissing, oMissing,
         oMissing);
        Excel.Worksheet xlWorksheet;
        // 循环所有DataTable
        for( int i=0; i<ds.Tables.Count; i++ )
        {
         // 添加入一个新的Sheet页。
         xlWorksheet = (Excel.Worksheet)xlWorkbook.Worksheets.Add(oMissing,oMissing,1,oMissing);
         // 以TableName作为新加的Sheet页名。
         xlWorksheet.Name = ds.Tables[i].TableName;
         // 取出这个DataTable中的所有值,暂存于stringBuffer中。
         string stringBuffer = "";
         for( int j=0; j<ds.Tables[i].Rows.Count; j++ )
         {
          for( int k=0; k<ds.Tables[i].Columns.Count; k++ )
          {
           
           stringBuffer += ds.Tables[i].Rows[j][k].ToString();
           if( k < ds.Tables[i].Columns.Count - 1 )
            stringBuffer += "\t";
          }
          stringBuffer += "\n";
         }
         // 利用系统剪切板
         System.Windows.Forms.Clipboard.SetDataObject("");
         // 将stringBuffer放入剪切板。
         System.Windows.Forms.Clipboard.SetDataObject(stringBuffer);
         // 选中这个sheet页中的第一个单元格
         ((Excel.Range)xlWorksheet.Cells[1,1]).Select();
         // 粘贴!
         xlWorksheet.Paste(oMissing,oMissing);
         // 清空系统剪切板。
         System.Windows.Forms.Clipboard.SetDataObject("");
        }
        // 保存并关闭这个工作簿。
        xlWorkbook.Close( Excel.XlSaveAction.xlSaveChanges, oMissing, oMissing );
        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkbook);
        xlWorkbook = null;
       }
       catch(Exception ex)
       {
        MessageBox.Show(ex.Message);
       }
       finally
       {
        // 释放...
        xlApp.Quit();
        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
        xlApp = null;
        GC.Collect();
       }
      }打印预览:xlWorksheet.PrintPreview(oMissing);
        打印:xlWorksheet.PrintOut(oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing);
    你根据需要,自己加上吧
      

  3.   

    只要调某个Excel,的某个sheet页的打印的话就更简单了。public static void InvokeExcelPrint(string strFilePath, string strSheetName)
    {
    Excel.ApplicationClass xlApp = new ApplicationClass();
    Excel.Workbooks xlWorkbooks;
    Excel.Workbook xlWorkbook;
    Excel.Worksheet xlWorksheet;
    System.Type tyWorkbooks;
                System.Reflection.MethodInfo[] methods;
    object objFilePath; object oMissing = System.Reflection.Missing.Value; if( !System.IO.File.Exists(strFilePath) )
    throw new System.IO.FileNotFoundException(); 
        
    try
    {
    xlApp.Visible = true;
    xlWorkbooks = xlApp.Workbooks;
    tyWorkbooks = xlWorkbooks.GetType();
    methods = tyWorkbooks.GetMethods();
    objFilePath = strFilePath;
    xlWorkbook = (Excel.Workbook)tyWorkbooks.InvokeMember(  "Open",
    System.Reflection.BindingFlags.InvokeMethod, 
    null, 
    xlWorkbooks, 
    new object[] {objFilePath, true, true} );
    xlWorksheet = (Excel.Worksheet)xlWorkbook.Worksheets[strSheetName];
    xlWorksheet.PrintPreview(true);
    xlWorkbook.Close(oMissing, oMissing, oMissing);
    }
    catch(Exception ex)
    {
    throw ex;
    }
    finally
    {
    if( xlApp != null)
    {
    xlApp.Quit();
    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
    xlApp = null;
    }
    GC.Collect();
    }
    }
      

  4.   

    不对已经存在的Excel文件打印,strSheetName我应该要输入什么?
      

  5.   

    我对已经存在的Excel文件打印,strSheetName我应该要输入什么?
      

  6.   

    http://community.csdn.net/Expert/topic/3933/3933439.xml?temp=.6784632我可以给你这个组件。我自己封装的
      

  7.   

    看到你的信了,可是给你回信总是失败,你的邮箱有设置吧。呵呵。加我的MSN吧。给你发过去
      

  8.   

    你的Msn多少,我的是[email protected]
    邮箱现为:[email protected]
    谢谢