using System;
using System.IO;
using CAXA.MPM.Modle;
using System.Collections.Generic;
using System.Text;
using Excel=Microsoft.Office.Interop.Excel;
using System.Diagnostics;
namespace CAXA.MPM.UI.Purchase
{
public class PurchaseOrderMainContextPrint
{
object missing = System.Reflection.Missing.Value;
private string TemplatePath = System.IO.Path.Combine(CAXA.MPM.Kernel.FileService.RootPath, @"Reports\PurchaseOrderContractPrint") + "\\";
private string OutPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop).ToString() + "\\";
private PurchaseOrderInfo PrInfo = new PurchaseOrderInfo();
private List<PurchaseOrderLineInfo> ListContextLine = new List<PurchaseOrderLineInfo>();
private List<PurchaseOrderLineInfo> ListPrinfoLine = new List<PurchaseOrderLineInfo>();
private int Flag=0;
public PurchaseOrderMainContextPrint(PurchaseOrderInfo prInfo,List<PurchaseOrderLineInfo> listContextLine, List<PurchaseOrderLineInfo> listprinfoLine,int intFlag)
{
this.PrInfo = prInfo;
this.ListContextLine = listContextLine;
this.ListPrinfoLine = listprinfoLine;
this.Flag=intFlag;
}
public bool Print()
{
bool bolReturn = false;
DateTime beforeTime;
DateTime afterTime;
beforeTime = DateTime.Now;
Excel.Application app = new Excel.ApplicationClass();
app.Visible = false;
app.DisplayAlerts = false;
afterTime = DateTime.Now;
string strTemplateFile = TemplatePath + "PurchaseOrderContract" + Flag.ToString()+".xls";
string strOutFile = OutPath + PrInfo.BillCode + "--" + Flag.ToString()+ ".xls";
// 打开模板文件,得到WorkBook对象
Excel.Workbook workBook = app.Workbooks.Open(strTemplateFile, missing, missing, missing, missing, missing,
missing, missing, missing, missing, missing, missing, missing, missing, missing);
#region 给合同文本赋值
Excel.Worksheet workSheet = (Excel.Worksheet)workBook.Worksheets.get_Item(1);
workSheet.Cells[3, 1] = "供方:" + PrInfo.PurchaseOrderContract.GongFang;
workSheet.Cells[4, 1] = "需方:" + PrInfo.PurchaseOrderContract.XuFang;
if (Flag == 3)
{
workSheet.Cells[2, 8] = "合同编号:" + PrInfo.PurchaseOrderContract.ContractNo;
workSheet.Cells[3, 8] = "签定地点:" + PrInfo.PurchaseOrderContract.ContractAdress;
workSheet.Cells[4, 8] = "签定时间:" + PrInfo.PurchaseOrderContract.ContractDate.Date.ToShortDateString();
}
else if (Flag == 2)
{
workSheet.Cells[2, 10] = "合同编号:" + PrInfo.PurchaseOrderContract.ContractNo;
workSheet.Cells[3, 10] = "签定地点:" + PrInfo.PurchaseOrderContract.ContractAdress;
workSheet.Cells[4, 10] = "签定时间:" + PrInfo.PurchaseOrderContract.ContractDate.Date.ToShortDateString();
}
else
{
workSheet.Cells[2, 9] = "合同编号:" + PrInfo.PurchaseOrderContract.ContractNo;
workSheet.Cells[3, 9] = "签定地点:" + PrInfo.PurchaseOrderContract.ContractAdress;
workSheet.Cells[4, 9] = "签定时间:" + PrInfo.PurchaseOrderContract.ContractDate.Date.ToShortDateString();
}
workSheet.Cells[14, 2] = PrInfo.PurchaseOrderContract.ShuoMing; //说明
workSheet.Cells[15, 1] = "合计人民币金额(含17%增值税):"+PrInfo.DXTotal;
if (Flag == 1)
{
workSheet.Cells[33, 2] = PrInfo.PurchaseOrderContract.Name;
workSheet.Cells[33, 7] = PrInfo.PurchaseOrderContract.MyName;
workSheet.Cells[34, 2] = PrInfo.PurchaseOrderContract.Address;
workSheet.Cells[34, 7] = PrInfo.PurchaseOrderContract.MyAddress;
workSheet.Cells[35, 2] = PrInfo.PurchaseOrderContract.Lawyer;
workSheet.Cells[35, 7] = PrInfo.PurchaseOrderContract.MyLawyer;
workSheet.Cells[36, 2] = PrInfo.PurchaseOrderContract.Entrust;
workSheet.Cells[36, 7] = PrInfo.PurchaseOrderContract.MyEntrust;
workSheet.Cells[37, 2] = PrInfo.PurchaseOrderContract.Phone;
workSheet.Cells[37, 7] = PrInfo.PurchaseOrderContract.MyPhone;
workSheet.Cells[38, 2] = PrInfo.PurchaseOrderContract.Bank;
workSheet.Cells[38, 7] = PrInfo.PurchaseOrderContract.MyBank;
workSheet.Cells[39, 2] = PrInfo.PurchaseOrderContract.Account;
workSheet.Cells[39, 7] = PrInfo.PurchaseOrderContract.MyAccount;
workSheet.Cells[40, 2] = PrInfo.PurchaseOrderContract.Taxes;
workSheet.Cells[40, 7] = PrInfo.PurchaseOrderContract.MyTaxes;
workSheet.Cells[41, 2] = PrInfo.PurchaseOrderContract.PostCode;
workSheet.Cells[41, 7] = PrInfo.PurchaseOrderContract.MyPostCode;
workSheet.Cells[42, 2] = PrInfo.PurchaseOrderContract.LinkAddress;
workSheet.Cells[42, 7] = PrInfo.PurchaseOrderContract.MyLinkAddress;
workSheet.Cells[43, 2] = PrInfo.PurchaseOrderContract.LinkPhone;
workSheet.Cells[43, 7] = PrInfo.PurchaseOrderContract.MyLinkPhone;
workSheet.Cells[44, 2] = PrInfo.PurchaseOrderContract.Fax;
workSheet.Cells[44, 7] = PrInfo.PurchaseOrderContract.MyFax;
}
else
{
workSheet.Cells[32, 2] = PrInfo.PurchaseOrderContract.Name;
workSheet.Cells[32, 7] = PrInfo.PurchaseOrderContract.MyName;
workSheet.Cells[33, 2] = PrInfo.PurchaseOrderContract.Address;
workSheet.Cells[33, 7] = PrInfo.PurchaseOrderContract.MyAddress;
workSheet.Cells[34, 2] = PrInfo.PurchaseOrderContract.Lawyer;
workSheet.Cells[34, 7] = PrInfo.PurchaseOrderContract.MyLawyer;
workSheet.Cells[35, 2] = PrInfo.PurchaseOrderContract.Entrust;
workSheet.Cells[35, 7] = PrInfo.PurchaseOrderContract.MyEntrust;
workSheet.Cells[36, 2] = PrInfo.PurchaseOrderContract.Phone;
workSheet.Cells[36, 7] = PrInfo.PurchaseOrderContract.MyPhone;
workSheet.Cells[37, 2] = PrInfo.PurchaseOrderContract.Bank;
workSheet.Cells[37, 7] = PrInfo.PurchaseOrderContract.MyBank;
workSheet.Cells[38, 2] = PrInfo.PurchaseOrderContract.Account;
workSheet.Cells[38, 7] = PrInfo.PurchaseOrderContract.MyAccount;
workSheet.Cells[39, 2] = PrInfo.PurchaseOrderContract.Taxes;
workSheet.Cells[39, 7] = PrInfo.PurchaseOrderContract.MyTaxes;
workSheet.Cells[40, 2] = PrInfo.PurchaseOrderContract.PostCode;
workSheet.Cells[40, 7] = PrInfo.PurchaseOrderContract.MyPostCode;
workSheet.Cells[41, 2] = PrInfo.PurchaseOrderContract.LinkAddress;
workSheet.Cells[41, 7] = PrInfo.PurchaseOrderContract.MyLinkAddress;
workSheet.Cells[42, 2] = PrInfo.PurchaseOrderContract.LinkPhone;
workSheet.Cells[42, 7] = PrInfo.PurchaseOrderContract.MyLinkPhone;
workSheet.Cells[43, 2] = PrInfo.PurchaseOrderContract.Fax;
workSheet.Cells[43, 7] = PrInfo.PurchaseOrderContract.MyFax;
}
//合同文本产品名称等项目复制
decimal AllNumberOf = 0;
decimal AllAmount = 0;
decimal AllKnead = 0;
int lineCount = ListContextLine.Count > 5 ? 5 : ListContextLine.Count;
if (Flag == 1)
{
for (int i = 8; i < lineCount+ 8; i++)
{
AllNumberOf += ListContextLine[i - 8].NumberOf;
AllAmount += ListContextLine[i - 8].Amount;
AllKnead += ListContextLine[i - 8].Knead;
workSheet.Cells[i, 1]=ListContextLine[i-8].PartName;
workSheet.Cells[i, 2]=ListContextLine[i-8].Material;
workSheet.Cells[i, 3]=ListContextLine[i-8].Spec;
workSheet.Cells[i, 5]=ListContextLine[i-8].NumberOf;
workSheet.Cells[i, 6]=ListContextLine[i-8].Amount;
workSheet.Cells[i, 7]=ListContextLine[i-8].Price;
workSheet.Cells[i, 8]=ListContextLine[i-8].Knead;
workSheet.Cells[i, 9]=ListContextLine[i-8].OriginPlace;
workSheet.Cells[i, 10] = "";
}
workSheet.Cells[13, 1] = "合 计";
workSheet.Cells[13, 5] = AllNumberOf;
workSheet.Cells[13, 6] = AllAmount;
workSheet.Cells[13, 8] = AllKnead;
}
if (Flag == 2)
{
for (int i = 8; i < lineCount + 8; i++)
{
AllNumberOf += ListContextLine[i - 8].NumberOf;
AllAmount += ListContextLine[i - 8].Amount;
AllKnead += ListContextLine[i - 8].Knead;
workSheet.Cells[i, 1] = ListContextLine[i - 8].Description;
workSheet.Cells[i, 2] = ListContextLine[i - 8].PartName;
workSheet.Cells[i, 3] = ListContextLine[i - 8].Spec;
workSheet.Cells[i, 5] = ListContextLine[i - 8].Material;
workSheet.Cells[i, 7] = ListContextLine[i - 8].PartUOM;
workSheet.Cells[i, 8] = ListContextLine[i - 8].NumberOf;
workSheet.Cells[i, 9] = ListContextLine[i - 8].Price;
workSheet.Cells[i, 10] = ListContextLine[i - 8].Knead;
workSheet.Cells[i, 11] = "";
}
workSheet.Cells[13, 1] = "合 计";
workSheet.Cells[13, 8] = AllNumberOf;
workSheet.Cells[13, 10] = AllKnead;
}
if(Flag == 3)
{
for (int i = 8; i < lineCount + 8; i++)
{
AllNumberOf += ListContextLine[i - 8].NumberOf;
AllAmount += ListContextLine[i - 8].Amount;
AllKnead += ListContextLine[i - 8].Knead;
workSheet.Cells[i, 1] = ListContextLine[i - 8].PartName;
workSheet.Cells[i, 2] = ListContextLine[i - 8].Material;
workSheet.Cells[i, 3] = ListContextLine[i - 8].Spec;
workSheet.Cells[i, 4] = ListContextLine[i - 8].PartUOM;
workSheet.Cells[i, 5] = ListContextLine[i - 8].NumberOf;
workSheet.Cells[i, 6] = ListContextLine[i - 8].Price;
workSheet.Cells[i, 7] = ListContextLine[i - 8].Knead;
workSheet.Cells[i, 8] = ListContextLine[i - 8].OriginPlace;
workSheet.Cells[i, 9] = "";
}
workSheet.Cells[13, 1] = "合 计";
workSheet.Cells[13, 5] = AllNumberOf;
workSheet.Cells[13, 7] = AllKnead;
}
//采购技术要求
for (int i = 17; i < 32; i++)
{
workSheet.Cells[i, 1] = "";
}
if (PrInfo.PurchaseOrderContract.TechnologyRequire != null)
{
if (PrInfo.PurchaseOrderContract.TechnologyRequire.IndexOf("\n") != -1)
{
string[] listTechnology = PrInfo.PurchaseOrderContract.TechnologyRequire.Split('\n');
for (int i = 17; i < 31; i++)
{
if ((i - 17) < listTechnology.Length)
{
workSheet.Cells[i, 1] = listTechnology[i - 17].ToString();
}
}
}
}
#endregion
#region 给清单赋值
if (ListPrinfoLine.Count > 0)
{
int ListCount = ListPrinfoLine.Count % 26 == 0 ? ListPrinfoLine.Count / 26 : ListPrinfoLine.Count / 26 + 1;
// 得到WorkSheet对象,清单对象
workSheet = (Excel.Worksheet)workBook.Sheets.get_Item(2);
for (int i = 2; i <= ListCount + 1; i++)
{
((Excel.Worksheet)workBook.Worksheets.get_Item(i)).Copy(missing, workBook.Worksheets[i]);
}
for (int i = 2; i <= ListCount + 1; i++)
{
workSheet = (Excel.Worksheet)workBook.Worksheets.get_Item(i);
workSheet.Name = "清单" + "-" + Convert.ToString(i - 1);
workSheet.PageSetup.CenterFooter = @"&""宋体""&12" + "第 " + Convert.ToString(i - 1) + " 页,共 " + Convert.ToString(ListCount) + " 页";
workSheet.PageSetup.LeftHeader = @"&""宋体""&18" +PrInfo.BillCode+ "-" + Convert.ToString(i - 1);
workSheet.PageSetup.CenterHeader = @"&""宋体""&18" + PrInfo.BillCode + "采购清单";
for (int k = 0; k < 26; k++)
{
if (26 * (i - 2) + k + 1>ListPrinfoLine.Count)
{
break;
}
workSheet.Cells[k + 2, 1] = 26 * (i - 2) + k+1;
workSheet.Cells[k + 2, 2] = ListPrinfoLine[26 * (i - 2) + k].AccountCode;
workSheet.Cells[k + 2, 3] = ListPrinfoLine[26 * (i - 2) + k].ProductCode;
workSheet.Cells[k + 2, 4] = ListPrinfoLine[26 * (i - 2) + k].Material;
workSheet.Cells[k + 2, 5] = ListPrinfoLine[26 * (i - 2) + k].Spec;
workSheet.Cells[k + 2, 6] = ListPrinfoLine[26 * (i - 2) + k].PartUOM;
workSheet.Cells[k + 2, 7] = ListPrinfoLine[26 * (i - 2) + k].NumberOf;
workSheet.Cells[k + 2, 8] = ListPrinfoLine[26 * (i - 2) + k].Amount;
workSheet.Cells[k + 2, 9] = ListPrinfoLine[26 * (i - 2) + k].Price;
workSheet.Cells[k + 2, 10] = ListPrinfoLine[26 * (i - 2) + k].Knead;
workSheet.Cells[k + 2, 11] = ListPrinfoLine[26 * (i - 2) + k].OriginPlace;
workSheet.Cells[k + 2, 12] = ListPrinfoLine[26 * (i - 2) + k].Status;
workSheet.Cells[k + 2, 13] = ListPrinfoLine[26 * (i - 2) + k].Criterion;
}
}
}
//删除最后一页记录
int SheetCount = app.Worksheets.Count;
workSheet = new Excel.WorksheetClass();
workSheet = (Excel.Worksheet)workBook.Sheets.get_Item(SheetCount);
workSheet.Delete();
#endregion
// 输出Excel文件并退出
try
{
workBook.SaveAs(strOutFile, missing, missing, missing, missing, missing, Excel.XlSaveAsAccessMode.xlExclusive, missing, missing, missing, missing, missing);
workBook.Close(null, null, null);
app.Workbooks.Close();
app.Application.Quit();
app.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(workSheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
workSheet = null;
workBook = null;
app = null;
GC.Collect();
bolReturn = true;
}
catch (Exception e)
{
throw e;
}
finally
{
Process[] myProcesses;
DateTime startTime;
myProcesses = Process.GetProcessesByName("Excel");
// 得不到Excel进程ID,暂时只能判断进程启动时间
foreach (Process myProcess in myProcesses)
{
startTime = myProcess.StartTime;
if (startTime > beforeTime && startTime < afterTime)
{
myProcess.Kill();
}
}
}
return bolReturn;
}
}
}