FrmExcelToGrid.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using CoreFS.CA06;
  10. using Core.Mes.Client.Comm.Tool;
  11. using System.Data.OleDb;
  12. using System.IO;
  13. using Infragistics.Win.UltraWinGrid;
  14. using NPOI.HSSF.UserModel;
  15. using NPOI.SS.UserModel;
  16. using NPOI.XSSF.UserModel;
  17. using System.Threading;
  18. using System.Collections;
  19. using Core.Mes.Client.Comm.Format;
  20. using Core.Mes.Client.Comm.Server;
  21. using com.steering.pss.sale.price.entity;
  22. namespace Core.StlMes.Client.SalePrice.BaseForm
  23. {
  24. public partial class FrmExcelToGrid : FrmBase
  25. {
  26. public FrmExcelToGrid()
  27. {
  28. InitializeComponent();
  29. }
  30. public FrmExcelToGrid(OpeBase ob)
  31. {
  32. InitializeComponent();
  33. this.ob = ob;
  34. }
  35. HSSFWorkbook hssfworkbook; //Office 2003
  36. XSSFWorkbook xssfworkbook; //Office 2007 2010
  37. ISheet sheet = null;
  38. private string saleOrg;
  39. /// <summary>
  40. /// 销售组织
  41. /// </summary>
  42. public string SaleOrg
  43. {
  44. get { return saleOrg; }
  45. set { saleOrg = value; }
  46. }
  47. /// <summary>
  48. /// 打开选择的Excel
  49. /// </summary>
  50. /// <param name="path"></param>
  51. private void InitializeWorkbook(string path)
  52. {
  53. try
  54. {
  55. using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read))
  56. {
  57. hssfworkbook = new HSSFWorkbook(file);
  58. sheet = hssfworkbook.GetSheetAt(0);
  59. }
  60. }
  61. catch
  62. {
  63. using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read))
  64. {
  65. xssfworkbook = new XSSFWorkbook(file);
  66. sheet = xssfworkbook.GetSheetAt(0);
  67. }
  68. }
  69. }
  70. delegate void SetGridCallBack(DataTable dt);
  71. private void SetGrid(DataTable dt)
  72. {
  73. if (ultraGrid1.InvokeRequired)
  74. {
  75. SetGridCallBack sg = new SetGridCallBack(SetGrid);
  76. this.Invoke(sg, new object[] { dt });
  77. }
  78. else
  79. {
  80. ultraGrid1.DataSource = dt;
  81. ultraGrid1.DisplayLayout.Bands[0].Columns["选择"].Header.CheckBoxVisibility = Infragistics.Win.UltraWinGrid.HeaderCheckBoxVisibility.WhenUsingCheckEditor;
  82. ultraGrid1.DisplayLayout.Bands[0].Columns[1].Width = 135;
  83. this.Cursor = Cursors.Default;
  84. }
  85. }
  86. /// <summary>
  87. /// 将Excel内容转化为DataTable
  88. /// </summary>
  89. private void ConvertToDataTable()
  90. {
  91. //ISheet sheet = hssfworkbook.GetSheetAt(0);
  92. System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
  93. IRow iRow = sheet.GetRow(0);
  94. short count = iRow.LastCellNum;
  95. //if (count != 5)
  96. //{
  97. // MessageUtil.ShowWarning("导入的Excel列数与模板列数不符!");
  98. // return;
  99. //}
  100. DataTable dt = new DataTable();
  101. for (int j = 0; j < count + 1; j++)
  102. {
  103. if (j == 0) //加一列选择框
  104. {
  105. dt.Columns.Add("选择");
  106. }
  107. else
  108. {
  109. dt.Columns.Add(Convert.ToChar(((int)'A') + j).ToString());
  110. }
  111. }
  112. dt.Columns[0].DefaultValue = "False";
  113. dt.Columns[0].DataType = typeof(Boolean);
  114. while (rows.MoveNext())
  115. {
  116. IRow row = null;
  117. try
  118. {
  119. row = (HSSFRow)rows.Current;
  120. }
  121. catch
  122. {
  123. row = (XSSFRow)rows.Current;
  124. }
  125. DataRow dr = dt.NewRow();
  126. for (int i = 1; i < row.LastCellNum + 1; i++)
  127. {
  128. ICell cell = row.GetCell(i - 1);
  129. if (cell == null)
  130. {
  131. dr[i] = null;
  132. }
  133. else
  134. {
  135. dr[i] = cell.ToString();
  136. }
  137. }
  138. dt.Rows.Add(dr);
  139. }
  140. SetGrid(dt);
  141. }
  142. /// <summary>
  143. /// 使用系统软件打开模板
  144. /// </summary>
  145. /// <param name="sender"></param>
  146. /// <param name="e"></param>
  147. private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
  148. {
  149. string path = "";
  150. path = System.Windows.Forms.Application.StartupPath + "\\PriceTemplate\\价格导出.xls";
  151. try
  152. {
  153. System.Diagnostics.Process.Start(path);
  154. }
  155. catch (Exception ex)
  156. {
  157. MessageUtil.ShowWarning("没有可用的模板!");
  158. }
  159. }
  160. private void ultraToolbarsManager1_ToolClick(object sender, Infragistics.Win.UltraWinToolbars.ToolClickEventArgs e)
  161. {
  162. switch (e.Tool.Key)
  163. {
  164. case "Import":
  165. ImportExcel();
  166. break;
  167. case "Confirm":
  168. ConfirmData();
  169. break;
  170. case "Close":
  171. this.Close();
  172. break;
  173. default:
  174. break;
  175. }
  176. }
  177. private void ImportExcel()
  178. {
  179. OpenFileDialog ofd = new OpenFileDialog();
  180. ofd.Filter = "所有文件|*.xls;*.xlsx|xls文件(*.xls)|*.xls|xlsx文件(*.xlsx)|*.xlsx";
  181. ofd.Multiselect = false;
  182. if (ofd.ShowDialog() == DialogResult.OK)
  183. {
  184. this.Cursor = Cursors.WaitCursor;
  185. string filePath = ofd.FileName;
  186. InitializeWorkbook(filePath);
  187. //ConvertToDataTable();
  188. Thread t = new Thread(new ThreadStart(ConvertToDataTable));
  189. t.Start();
  190. }
  191. }
  192. Dictionary<string, string> dic = new Dictionary<string, string>();
  193. Dictionary<string, ArrayList> price = new Dictionary<string, ArrayList>();
  194. /// <summary>
  195. /// 确认数据
  196. /// </summary>
  197. private void ConfirmData()
  198. {
  199. ultraGrid1.UpdateData();
  200. int flag = 0;
  201. ArrayList parm = new ArrayList();
  202. ArrayList parm_price = new ArrayList();
  203. SlmPriceBasepriceLineEntity sop = new SlmPriceBasepriceLineEntity();
  204. foreach (UltraGridRow row in ultraGrid1.Rows)
  205. {
  206. if (row.Cells["选择"].Value.ToString().ToUpper() == "TRUE")
  207. {
  208. flag += 1;
  209. // sop.PriceLineId = row.Cells[1].Value.ToString();
  210. sop.PriceHeadId = row.Cells[1].Value.ToString();
  211. sop.FrameId = "A000001";
  212. sop.WaijingBegin =Decimal.Parse(row.Cells[2].Value.ToString());
  213. sop.WaijingEnd= Decimal.Parse(row.Cells[3].Value.ToString());
  214. sop.BihouBegin = Decimal.Parse(row.Cells[4].Value.ToString());
  215. sop.BihouEnd = Decimal.Parse(row.Cells[5].Value.ToString());
  216. // sop.Specificion = row.Cells[6].Value.ToString();
  217. if (row.Cells[7].Value.ToString().Trim()=="吨")
  218. {
  219. sop.PriceUnit="121503";
  220. }
  221. if (row.Cells[7].Value.ToString().Trim() == "支")
  222. {
  223. sop.PriceUnit = "121501";
  224. }
  225. if (row.Cells[7].Value.ToString().Trim() == "米")
  226. {
  227. sop.PriceUnit = "121502";
  228. }
  229. if (row.Cells[7].Value.ToString().Trim() == "英镑")
  230. {
  231. sop.PriceUnit = "121504";
  232. }
  233. if (row.Cells[7].Value.ToString().Trim() == "英尺")
  234. {
  235. sop.PriceUnit = "121505";
  236. }
  237. sop.PriceNum = Decimal.Parse(row.Cells[8].Value.ToString());
  238. // sop.Validflag ="1";
  239. sop.CreateName = UserInfo.GetUserName();
  240. if (row.Cells[2].Value.ToString() == "" || row.Cells[3].Value.ToString() == "" || row.Cells[4].Value.ToString() == "" || row.Cells[5].Value.ToString() == "")
  241. {
  242. MessageUtil.ShowWarning("外径壁厚范围不能为空!");
  243. return;
  244. }
  245. else
  246. {
  247. if (!StringUtil.IsNumber(row.Cells[2].Value.ToString()) || !StringUtil.IsNumber(row.Cells[3].Value.ToString()) || !StringUtil.IsNumber(row.Cells[4].Value.ToString()) || !StringUtil.IsNumber(row.Cells[5].Value.ToString()))
  248. {
  249. MessageUtil.ShowWarning("外径壁厚范围必须为数字!");
  250. return;
  251. }
  252. }
  253. parm_price.Add(JSONFormat.Format(sop));
  254. }
  255. }
  256. if (flag == 0)
  257. {
  258. MessageUtil.ShowWarning("请勾选或者拖选您要确认的数据!");
  259. return;
  260. }
  261. if (MessageUtil.ShowYesNoAndQuestion("是否确认导入数据!") == DialogResult.No) return;
  262. int i = ServerHelper.SetData("com.steering.pss.sale.price.server.CorePriceFramePrice.save",
  263. new object[] { parm, parm_price }, this.ob);
  264. if (i > 0)
  265. {
  266. MessageUtil.ShowTips("数据保存成功!");
  267. }
  268. else
  269. {
  270. MessageUtil.ShowTips("数据保存失败!");
  271. }
  272. }
  273. private void ultraGrid1_AfterSelectChange(object sender, Infragistics.Win.UltraWinGrid.AfterSelectChangeEventArgs e)
  274. {
  275. foreach (UltraGridRow uRow in ultraGrid1.Selected.Rows)
  276. {
  277. if (uRow.GetType() != typeof(Infragistics.Win.UltraWinGrid.UltraGridGroupByRow))
  278. {
  279. uRow.Cells["选择"].Value = true;
  280. }
  281. }
  282. }
  283. }
  284. }