C#操作excel打印的示例
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ù)庫(kù)
//DataBase.OleDbObject.InitDatabase(OriginalPath);
//DataBase.OleDbObject.OpenDb();
//int k=DataBase.OleDbObject.Select("select * from ElementInventory").Rows.Count;
//初始化要寫(xiě)入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] = "測(cè)試用例" + i + "號(hào),開(kāi)始測(cè)試是否自動(dòng)換行,以及頁(yè)面高度自適應(yīng)。";
}
else
{
dr[0] = "測(cè)試用例" + i + "號(hào)";
}
for (int j = 1; j < 11; j++)
{
dr[j] = j;
}
dt.Rows.Add(dr);
}
if (!isStartPrint)
{
Thread th = new Thread(delegate ()
{
DataTabletoExcel(dt, "測(cè)試.xlsx");
});
th.Start();
isStartPrint = true;
}
else
{
MessageBox.Show("打印程序已啟用,請(qǐng)稍后……", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
//DataTabletoExcel(dt, "測(cè)試.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(); //聲明一個(gè)應(yīng)用程序類(lèi)實(shí)例
//ExcelApp.DefaultFilePath = ""; //默認(rèn)文件路徑導(dǎo)出excel的路徑還是在參數(shù)strFileName里設(shè)置
//ExcelApp.DisplayAlerts = true;
//ExcelApp.SheetsInNewWorkbook = 1;///返回或設(shè)置 Microsoft Excel 自動(dòng)插入到新工作簿中的工作表數(shù)目。
Excel.Workbook worksBook = ExcelApp.Workbooks.Add(); //創(chuàng)建一個(gè)新工作簿
Excel.Worksheet workSheet = (Excel.Worksheet)worksBook.Worksheets[1]; //在工作簿中得到sheet。
if (workSheet == null)
{
System.Diagnostics.Debug.WriteLine("ERROR: worksheet == null");
return;
}
workSheet.Name = "測(cè)試Sheet1"; //工作表的名稱(chēng)
workSheet.Cells.WrapText = true; //設(shè)置所有列的文本自動(dòng)換行
workSheet.Cells.EntireRow.AutoFit(); //設(shè)置所有列自動(dòng)調(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;
//------------------------打印頁(yè)面相關(guān)設(shè)置--------------------------------
workSheet.PageSetup.PaperSize = Excel.XlPaperSize.xlPaperA4;//紙張大小
workSheet.PageSetup.Orientation = Excel.XlPageOrientation.xlLandscape;//頁(yè)面橫向
//workSheet.PageSetup.Zoom = 75; //打印時(shí)頁(yè)面設(shè)置,縮放比例百分之幾
workSheet.PageSetup.Zoom = false; //打印時(shí)頁(yè)面設(shè)置,必須設(shè)置為false,頁(yè)高,頁(yè)寬才有效
workSheet.PageSetup.FitToPagesWide = 1; //設(shè)置頁(yè)面縮放的頁(yè)寬為1頁(yè)寬
workSheet.PageSetup.FitToPagesTall = false; //設(shè)置頁(yè)面縮放的頁(yè)高自動(dòng)
workSheet.PageSetup.LeftHeader = "Nigel";//頁(yè)面左上邊的標(biāo)志
workSheet.PageSetup.CenterFooter = "第 &P 頁(yè),共 &N 頁(yè)";//頁(yè)面下標(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; //文字水平居中
//------------------------打印頁(yè)面設(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); //殺掉生成的進(jìn)程
isStartPrint = false; //打印完畢
GC.Collect(); //垃圾回收機(jī)制
}
/// <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>
/// 殺掉生成的進(jìn)程
/// </summary>
/// <param name="AppObject">進(jìn)程程對(duì)象</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("進(jìn)程關(guān)閉失??!異常信息:" + ex);
}
}
/// <summary>
/// 創(chuàng)建表頭單元格,包括合并單元格
/// </summary>
/// <param name="workSheet">工作表</param>
/// <param name="startCell">單元格起始格編號(hào)</param>
/// <param name="endCell">單元格結(jié)束編號(hào)</param>
/// <param name="strText">單元格名稱(chēng)</param>
private static bool RangeMark(Excel.Worksheet workSheet, string startCell, string endCell, string strText)
{
//創(chuàng)建一個(gè)區(qū)域?qū)ο蟆5谝粋€(gè)參數(shù)是開(kāi)始格子號(hào),第二個(gè)參數(shù)是終止格子號(hào)。比如選中A1——D3這個(gè)區(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的時(shí)候直接合并為一個(gè)單元格
range.Font.Size = 16; //字體大小
range.Font.Name = "黑體"; //字體
range.WrapText = true; //文本自動(dòng)換行
range.EntireRow.AutoFit(); //自動(dòng)調(diào)整行高
//range.RowHeight = 20;
//range.EntireColumn.AutoFit(); //自動(dòng)調(diào)整列寬
range.ColumnWidth = 15;
range.HorizontalAlignment = XlVAlign.xlVAlignCenter; //橫向居中
range.Value = strText; //合并單元格之后,設(shè)置其中的文本
range.Interior.ColorIndex = 20; //填充顏色
range.Cells.Borders.LineStyle = 1; //設(shè)置單元格邊框的粗細(xì)
return true;
}
}
}
以上就是C#操作excel打印的示例的詳細(xì)內(nèi)容,更多關(guān)于c# 打印的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- c# 實(shí)現(xiàn)打印機(jī)狀態(tài)查詢(xún)與阻塞打印
- c#使用Aspose打印文件的示例
- C# 調(diào)用exe傳參,并獲取打印值的實(shí)例
- 如何利用C#打印九九乘法表
- c# winform 解決PictureBox 無(wú)法打印全部圖片的問(wèn)題
- C#操作Word打印的示例
- C# 打印網(wǎng)頁(yè)不顯示頁(yè)眉頁(yè)腳的實(shí)現(xiàn)方法
- C#實(shí)現(xiàn)掃描槍掃描二維碼并打印(實(shí)例代碼)
- C#利用PrintDocument定制打印單據(jù)的小例子
- C#打印PDF文檔的10種方法(小結(jié))
- C# TSC打印二維碼和條形碼的實(shí)現(xiàn)方法
- C# winform打印excel的方法
- c# 如何實(shí)現(xiàn)web打印插件
相關(guān)文章
C#使用泛型實(shí)現(xiàn)刪除數(shù)組中重復(fù)元素
這篇文章主要為大家詳細(xì)介紹了C#如何使用泛型實(shí)現(xiàn)刪除數(shù)組中重復(fù)元素,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02
C# WinForm中Panel實(shí)現(xiàn)用鼠標(biāo)操作滾動(dòng)條的實(shí)例方法
由于在WinForm中Panel不能直接響應(yīng)鼠標(biāo)的滾動(dòng)事件,只好采用捕獲窗體的滾動(dòng)事件。2013-03-03
使用C#?11的靜態(tài)接口方法改進(jìn)?面向約定?的設(shè)計(jì)方法
我們知道接口是針對(duì)契約的定義,但是一直以來(lái)它只能定義一組“實(shí)例”的契約,而不能定義類(lèi)型的契約,因?yàn)槎x在接口中的方法只能是實(shí)例方,這篇文章主要介紹了使用C#?11的靜態(tài)接口方法改進(jìn)面向約定?的設(shè)計(jì),需要的朋友可以參考下2022-12-12
C#實(shí)現(xiàn)簡(jiǎn)單學(xué)生成績(jī)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)簡(jiǎn)單學(xué)生成績(jī)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
C#中ListView控件實(shí)現(xiàn)窗體代碼
這篇文章主要介紹了C#中ListView控件實(shí)現(xiàn)窗體的核心代碼,非常不錯(cuò),具有參考借鑒價(jià)值,對(duì)c#listview相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2016-08-08
C#使用System.Threading.Timer實(shí)現(xiàn)計(jì)時(shí)器的示例詳解
以往一般都是用 System.Timers.Timer 來(lái)做計(jì)時(shí)器,其實(shí) System.Threading.Timer 也可以實(shí)現(xiàn)計(jì)時(shí)器功能,下面就跟隨小編一起來(lái)學(xué)習(xí)一下如何使用System.Threading.Timer實(shí)現(xiàn)計(jì)時(shí)器功能吧2024-01-01
C#中事務(wù)處理和非事務(wù)處理方法實(shí)例分析
這篇文章主要介紹了C#中事務(wù)處理和非事務(wù)處理方法,較為詳細(xì)的分析了C#中事務(wù)處理與非事務(wù)處理的使用技巧,對(duì)于使用C#進(jìn)行數(shù)據(jù)庫(kù)程序開(kāi)發(fā)有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
C#實(shí)現(xiàn)簡(jiǎn)單合并word文檔的方法
這篇文章主要介紹了C#實(shí)現(xiàn)簡(jiǎn)單合并word文檔的方法,涉及C#針對(duì)word文檔的讀取、插入、保存等技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-09-09

