欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#操作excel打印的示例

 更新時間:2020年10月28日 09:23:38   作者:一只獨行的猿  
這篇文章主要介紹了C#操作excel打印的示例,幫助大家利用c#打印表格,提高辦公效率,感興趣的朋友可以了解下
using System;
using System.Data;
using System.IO;
using System.Runtime.InteropServices;
using System.Threading;
using System.Windows.Forms;
using Microsoft.Office.Core;
using Excel = Microsoft.Office.Interop.Excel;

namespace WindowsFormsApplication1
{
  public partial class Form1 : Form
  {
    private bool isStartPrint = false;

    public Form1()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      //string OriginalPath = Path.GetDirectoryName(Application.ExecutablePath) + "\\IMS.accdb";
      ////初始化數(shù)據(jù)庫
      //DataBase.OleDbObject.InitDatabase(OriginalPath);
      //DataBase.OleDbObject.OpenDb();
      //int k=DataBase.OleDbObject.Select("select * from ElementInventory").Rows.Count;

      //初始化要寫入Excel的數(shù)據(jù)
      DataTable dt = new DataTable();
      for (int i = 0; i < 11; i++)
      {
        DataColumn dc = new DataColumn();
        dc.ColumnName = "name" + i;
        dc.DataType = typeof(string);
        dt.Columns.Add(dc);
      }
      for (int i = 0; i < 30; i++)
      {
        DataRow dr = dt.NewRow();
        if (i % 2 == 0)
        {
          dr[0] = "測試用例" + i + "號,開始測試是否自動換行,以及頁面高度自適應(yīng)。";
        }
        else
        {
          dr[0] = "測試用例" + i + "號";
        }
        for (int j = 1; j < 11; j++)
        {
          dr[j] = j;
        }
        dt.Rows.Add(dr);
      }
      if (!isStartPrint)
      {
        Thread th = new Thread(delegate ()
        {
          DataTabletoExcel(dt, "測試.xlsx");
        });
        th.Start();
        isStartPrint = true;
      }
      else
      {
        MessageBox.Show("打印程序已啟用,請稍后……", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
      }
      //DataTabletoExcel(dt, "測試.xlsx");
    }

    public void DataTabletoExcel(System.Data.DataTable dtTemp, string strFileName)
    {
      int rowNum = dtTemp.Rows.Count; //先得到dtTemp的行數(shù)
      int columnNum = dtTemp.Columns.Count; //列數(shù)
      Excel.Application ExcelApp = new Excel.Application(); //聲明一個應(yīng)用程序類實例

      //ExcelApp.DefaultFilePath = ""; //默認文件路徑導(dǎo)出excel的路徑還是在參數(shù)strFileName里設(shè)置
      //ExcelApp.DisplayAlerts = true;
      //ExcelApp.SheetsInNewWorkbook = 1;///返回或設(shè)置 Microsoft Excel 自動插入到新工作簿中的工作表數(shù)目。
      Excel.Workbook worksBook = ExcelApp.Workbooks.Add(); //創(chuàng)建一個新工作簿
      Excel.Worksheet workSheet = (Excel.Worksheet)worksBook.Worksheets[1]; //在工作簿中得到sheet。
      if (workSheet == null)
      {
        System.Diagnostics.Debug.WriteLine("ERROR: worksheet == null");
        return;
      }
      workSheet.Name = "測試Sheet1"; //工作表的名稱
      workSheet.Cells.WrapText = true; //設(shè)置所有列的文本自動換行
      workSheet.Cells.EntireRow.AutoFit(); //設(shè)置所有列自動調(diào)整行高
      #region 繪制列
      ///自定義方法,向sheet中繪制列
      RangeMark(workSheet, "A1", "A2", "合并豎列1");
      RangeMark(workSheet, "B1", "B2", "合并豎列2");
      RangeMark(workSheet, "C1", "C2", "合并豎列3");
      RangeMark(workSheet, "D1", "D2", "合并豎列4");
      RangeMark(workSheet, "E1", "E2", "合并豎列5");
      RangeMark(workSheet, "F1", "H1", "合并橫行1");
      RangeMark(workSheet, "F2", "F2", "合并橫行1.1");
      RangeMark(workSheet, "G2", "G2", "合并橫行1.2");
      RangeMark(workSheet, "H2", "H2", "合并橫行1.3");
      RangeMark(workSheet, "I1", "K1", "合并橫行2");
      RangeMark(workSheet, "I2", "J2", "合并橫行2.1");
      RangeMark(workSheet, "K2", "K2", "合并橫行2.2");
      #endregion
      //將DataTable中的數(shù)據(jù)導(dǎo)入Excel中
      for (int i = 0; i < rowNum; i++)
      {
        for (int j = 0; j < columnNum; j++)
        {
          workSheet.Cells[i + 3, j + 1] = dtTemp.Rows[i][j].ToString(); //文本

        }
      }
      ///保存路徑
      string filePath = @"C:\Users\Admin\Desktop\" + strFileName;
      if (File.Exists(filePath))
      {
        try
        {
          File.Delete(filePath);
        }
        catch (Exception)
        {

        }
      }
      ExcelApp.Visible = true;
      //------------------------打印頁面相關(guān)設(shè)置--------------------------------
      workSheet.PageSetup.PaperSize = Excel.XlPaperSize.xlPaperA4;//紙張大小
      workSheet.PageSetup.Orientation = Excel.XlPageOrientation.xlLandscape;//頁面橫向
                                         //workSheet.PageSetup.Zoom = 75; //打印時頁面設(shè)置,縮放比例百分之幾
      workSheet.PageSetup.Zoom = false; //打印時頁面設(shè)置,必須設(shè)置為false,頁高,頁寬才有效
      workSheet.PageSetup.FitToPagesWide = 1; //設(shè)置頁面縮放的頁寬為1頁寬
      workSheet.PageSetup.FitToPagesTall = false; //設(shè)置頁面縮放的頁高自動
      workSheet.PageSetup.LeftHeader = "Nigel";//頁面左上邊的標(biāo)志
      workSheet.PageSetup.CenterFooter = "第 &P 頁,共 &N 頁";//頁面下標(biāo)
      workSheet.PageSetup.PrintGridlines = true; //打印單元格網(wǎng)線
      workSheet.PageSetup.TopMargin = 1.5 / 0.035; //上邊距為2cm(轉(zhuǎn)換為in)
      workSheet.PageSetup.BottomMargin = 1.5 / 0.035; //下邊距為1.5cm
      workSheet.PageSetup.LeftMargin = 2 / 0.035; //左邊距為2cm
      workSheet.PageSetup.RightMargin = 2 / 0.035; //右邊距為2cm
      workSheet.PageSetup.CenterHorizontally = true; //文字水平居中
                              //------------------------打印頁面設(shè)置結(jié)束--------------------------------
                              ///http://blog.csdn.net/wanmingtom/article/details/6125599
      worksBook.PrintPreview(); //打印預(yù)覽
                   //worksBook.PrintOutEx(); //直接打印
                   //worksBook.Close(); //關(guān)閉工作空間
                   //ExcelApp.Quit(); //退出程序
                   //workSheet.SaveAs(filePath); //另存表
      KillProcess(ExcelApp); //殺掉生成的進程
      isStartPrint = false; //打印完畢
      GC.Collect(); //垃圾回收機制
    }
    /// <summary>
    /// 引用Windows句柄,獲取程序PID
    /// </summary>
    /// <param name="Hwnd"></param>
    /// <param name="PID"></param>
    /// <returns></returns>
    [DllImport("User32.dll")]
    public static extern int GetWindowThreadProcessId(IntPtr Hwnd, out int PID);
    /// <summary>
    /// 殺掉生成的進程
    /// </summary>
    /// <param name="AppObject">進程程對象</param>
    private static void KillProcess(Excel.Application AppObject)
    {
      int Pid = 0;
      IntPtr Hwnd = new IntPtr(AppObject.Hwnd);
      System.Diagnostics.Process p = null;
      try
      {
        GetWindowThreadProcessId(Hwnd, out Pid);
        p = System.Diagnostics.Process.GetProcessById(Pid);
        if (p != null)
        {
          p.Kill();
          p.Dispose();
        }
      }
      catch (Exception ex)
      {
        System.Diagnostics.Debug.WriteLine("進程關(guān)閉失敗!異常信息:" + ex);
      }
    }

    /// <summary>
    /// 創(chuàng)建表頭單元格,包括合并單元格
    /// </summary>
    /// <param name="workSheet">工作表</param>
    /// <param name="startCell">單元格起始格編號</param>
    /// <param name="endCell">單元格結(jié)束編號</param>
    /// <param name="strText">單元格名稱</param>
    private static bool RangeMark(Excel.Worksheet workSheet, string startCell, string endCell, string strText)
    {
      //創(chuàng)建一個區(qū)域?qū)ο?。第一個參數(shù)是開始格子號,第二個參數(shù)是終止格子號。比如選中A1——D3這個區(qū)域。
      Excel.Range range = (Excel.Range)workSheet.get_Range(startCell, endCell);
      if (range == null)
      {
        System.Diagnostics.Debug.WriteLine("ERROR: range == null");
        return false;
      }
      range.Merge(0); //合并方法,0的時候直接合并為一個單元格
      range.Font.Size = 16; //字體大小
      range.Font.Name = "黑體"; //字體
      range.WrapText = true; //文本自動換行
      range.EntireRow.AutoFit(); //自動調(diào)整行高
                    //range.RowHeight = 20; 
                    //range.EntireColumn.AutoFit(); //自動調(diào)整列寬
      range.ColumnWidth = 15;
      range.HorizontalAlignment = XlVAlign.xlVAlignCenter; //橫向居中
      range.Value = strText; //合并單元格之后,設(shè)置其中的文本
      range.Interior.ColorIndex = 20; //填充顏色
      range.Cells.Borders.LineStyle = 1; //設(shè)置單元格邊框的粗細

      return true;
    }
  }
}

以上就是C#操作excel打印的示例的詳細內(nèi)容,更多關(guān)于c# 打印的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#使用泛型實現(xiàn)刪除數(shù)組中重復(fù)元素

    C#使用泛型實現(xiàn)刪除數(shù)組中重復(fù)元素

    這篇文章主要為大家詳細介紹了C#如何使用泛型實現(xiàn)刪除數(shù)組中重復(fù)元素,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • C# WinForm中Panel實現(xiàn)用鼠標(biāo)操作滾動條的實例方法

    C# WinForm中Panel實現(xiàn)用鼠標(biāo)操作滾動條的實例方法

    由于在WinForm中Panel不能直接響應(yīng)鼠標(biāo)的滾動事件,只好采用捕獲窗體的滾動事件。
    2013-03-03
  • 使用C#?11的靜態(tài)接口方法改進?面向約定?的設(shè)計方法

    使用C#?11的靜態(tài)接口方法改進?面向約定?的設(shè)計方法

    我們知道接口是針對契約的定義,但是一直以來它只能定義一組“實例”的契約,而不能定義類型的契約,因為定義在接口中的方法只能是實例方,這篇文章主要介紹了使用C#?11的靜態(tài)接口方法改進面向約定?的設(shè)計,需要的朋友可以參考下
    2022-12-12
  • C#實現(xiàn)簡單學(xué)生成績管理系統(tǒng)

    C#實現(xiàn)簡單學(xué)生成績管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C#實現(xiàn)簡單學(xué)生成績管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C#中ListView控件實現(xiàn)窗體代碼

    C#中ListView控件實現(xiàn)窗體代碼

    這篇文章主要介紹了C#中ListView控件實現(xiàn)窗體的核心代碼,非常不錯,具有參考借鑒價值,對c#listview相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧
    2016-08-08
  • C#讀寫文本文件的方法

    C#讀寫文本文件的方法

    這篇文章主要介紹了C#讀寫文本文件的方法,實例分析了C#操作文本文件的原理與實現(xiàn)技巧,需要的朋友可以參考下
    2015-06-06
  • C#使用System.Threading.Timer實現(xiàn)計時器的示例詳解

    C#使用System.Threading.Timer實現(xiàn)計時器的示例詳解

    以往一般都是用 System.Timers.Timer 來做計時器,其實 System.Threading.Timer 也可以實現(xiàn)計時器功能,下面就跟隨小編一起來學(xué)習(xí)一下如何使用System.Threading.Timer實現(xiàn)計時器功能吧
    2024-01-01
  • C#中事務(wù)處理和非事務(wù)處理方法實例分析

    C#中事務(wù)處理和非事務(wù)處理方法實例分析

    這篇文章主要介紹了C#中事務(wù)處理和非事務(wù)處理方法,較為詳細的分析了C#中事務(wù)處理與非事務(wù)處理的使用技巧,對于使用C#進行數(shù)據(jù)庫程序開發(fā)有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • C#實現(xiàn)簡單合并word文檔的方法

    C#實現(xiàn)簡單合并word文檔的方法

    這篇文章主要介紹了C#實現(xiàn)簡單合并word文檔的方法,涉及C#針對word文檔的讀取、插入、保存等技巧,非常具有實用價值,需要的朋友可以參考下
    2015-09-09
  • C#關(guān)鍵字Check簡單介紹

    C#關(guān)鍵字Check簡單介紹

    這篇文章主要介紹了C#關(guān)鍵字Check功能描述及注意事項,checke關(guān)鍵字主要用于對整型類型算術(shù)運算和轉(zhuǎn)換顯式啟用溢出檢查,本文通過程序演示給大家詳細介紹,需要的朋友一起看看吧
    2022-04-04

最新評論