public int print(bool b) { int label_打印成功 = 1; // 打开一个Excel进程 Microsoft.Office.Interop.Excel.Application oXL = new Microsoft.Office.Interop.Excel.Application(); // 利用这个进程打开一个Excel文件 string dir = System.IO.Directory.GetCurrentDirectory(); dir += "./../../xls/cleancut/SOP-MFG-302-R01A 清洁分切生产指令.xlsx"; Microsoft.Office.Interop.Excel._Workbook wb = oXL.Workbooks.Open(dir); // 选择一个Sheet,注意Sheet的序号是从1开始的 Microsoft.Office.Interop.Excel._Worksheet my = wb.Worksheets[2]; // 修改Sheet中某行某列的值 fill_excel(my); //"生产指令-步骤序号- 表序号 /&P" my.PageSetup.RightFooter = instrcode + "-01-" + find_indexofprint().ToString("D3") + " &P/" + wb.ActiveSheet.PageSetup.Pages.Count; // &P 是页码 if (b) { // 设置该进程是否可见 oXL.Visible = true; // 让这个Sheet为被选中状态 my.Select(); // oXL.Visible=true 加上这一行 就相当于预览功能 return(0); } else { int pageCount = wb.ActiveSheet.PageSetup.Pages.Count; // 直接用默认打印机打印该Sheet try { my.PrintOut(); // oXL.Visible=false 就会直接打印该Sheet } catch { label_打印成功 = 0; } finally { if (1 == label_打印成功) { string log = "\n=====================================\n"; log += DateTime.Now.ToString("yyyy年MM月dd日 hh时mm分ss秒") + "\n" + label角色.Text + ":" + mySystem.Parameter.userName + " 完成打印\n"; dt_prodinstr.Rows[0]["日志"] = dt_prodinstr.Rows[0]["日志"].ToString() + log; bs_prodinstr.EndEdit(); if (!mySystem.Parameter.isSqlOk) { da_prodinstr.Update((DataTable)bs_prodinstr.DataSource); } else { da_prodinstrsql.Update((DataTable)bs_prodinstr.DataSource); } } // 关闭文件,false表示不保存 wb.Close(false); // 关闭Excel进程 oXL.Quit(); // 释放COM资源 Marshal.ReleaseComObject(wb); Marshal.ReleaseComObject(oXL); wb = null; oXL = null; my = null; } return(pageCount); } }
public int print(bool isShow) { // 打开一个Excel进程 Microsoft.Office.Interop.Excel.Application oXL = new Microsoft.Office.Interop.Excel.Application(); // 利用这个进程打开一个Excel文件 Microsoft.Office.Interop.Excel._Workbook wb = oXL.Workbooks.Open(System.IO.Directory.GetCurrentDirectory() + @"\..\..\xls\cleancut\5 SOP-MFG-302-R05A 清洁分切工序清场记录.xlsx"); // 选择一个Sheet,注意Sheet的序号是从1开始的 Microsoft.Office.Interop.Excel._Worksheet my = wb.Worksheets[1]; // 修改Sheet中某行某列的值 fill_excel(my); //"生产指令-步骤序号- 表序号 /&P" int sheetnum; OleDbDataAdapter da = new OleDbDataAdapter("select ID from 清场记录" + " where 生产指令ID=" + instrid.ToString(), mySystem.Parameter.connOle); DataTable dt = new DataTable("temp"); da.Fill(dt); List <Int32> sheetList = new List <Int32>(); for (int i = 0; i < dt.Rows.Count; i++) { sheetList.Add(Convert.ToInt32(dt.Rows[i]["ID"].ToString())); } sheetnum = sheetList.IndexOf(Convert.ToInt32(dt_prodinstr.Rows[0]["ID"])) + 1; my.PageSetup.RightFooter = instrcode + "-05-" + sheetnum.ToString("D3") + " &P/" + wb.ActiveSheet.PageSetup.Pages.Count; // &P 是页码 if (isShow) { //true->预览 // 设置该进程是否可见 oXL.Visible = true; // 让这个Sheet为被选中状态 my.Select(); // oXL.Visible=true 加上这一行 就相当于预览功能 return(0); } else { int pageCount = wb.ActiveSheet.PageSetup.Pages.Count; bool isPrint = true; //false->打印 try { // 设置该进程是否可见 //oXL.Visible = false; // oXL.Visible=false 就会直接打印该Sheet // 直接用默认打印机打印该Sheet my.PrintOut(); } catch { isPrint = false; } finally { if (isPrint) { //写日志 string log = "=====================================\n"; log += DateTime.Now.ToString("yyyy年MM月dd日 hh时mm分ss秒") + "\n" + label角色.Text + ":" + mySystem.Parameter.userName + " 打印文档\n"; dt_prodinstr.Rows[0]["日志"] = dt_prodinstr.Rows[0]["日志"].ToString() + log; bs_prodinstr.EndEdit(); if (!mySystem.Parameter.isSqlOk) { da_prodinstr.Update((DataTable)bs_prodinstr.DataSource); } else { da_prodinstrsql.Update((DataTable)bs_prodinstr.DataSource); } } // 关闭文件,false表示不保存 wb.Close(false); // 关闭Excel进程 oXL.Quit(); // 释放COM资源 Marshal.ReleaseComObject(wb); Marshal.ReleaseComObject(oXL); wb = null; oXL = null; my = null; } return(pageCount); } }