FormRecordsManager.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. using DevComponents.DotNetBar.Controls;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.IO;
  8. using System.Linq;
  9. using System.Runtime.InteropServices;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using System.Windows.Forms;
  13. using Excel = Microsoft.Office.Interop.Excel;
  14. namespace centralController
  15. {
  16. public partial class FormRecordsManager : Form
  17. {
  18. public FormRecordsManager()
  19. {
  20. InitializeComponent();
  21. }
  22. private void btnx_parkingRecordSearch_Click(object sender, EventArgs e)
  23. {
  24. DateTime start, end;
  25. string license="";
  26. try
  27. {
  28. start = DateTime.Parse(dtp_startDate.Text);
  29. end = DateTime.Parse(dtp_endDate.Text);
  30. license = tb_license.Text;
  31. }
  32. catch { MessageBox.Show("日期输入异常,请重新输入");return; }
  33. dgvx_parkingRecords.Rows.Clear();
  34. List<object[]> list = Monitor.Monitor.GetParkingRecords(license,start.ToString("yyyy-MM-dd"), end.AddDays(1).ToString("yyyy-MM-dd"));
  35. List<object[]>.Enumerator listEnumer = list.GetEnumerator();
  36. while (listEnumer.MoveNext())
  37. {
  38. dgvx_parkingRecords.Rows.Add(listEnumer.Current);
  39. }
  40. //Console.WriteLine(mtb_startDate.Text+","+mtb_endDate.Text);
  41. //Console.WriteLine(start.ToString("yyyy-MM-dd") + "," + end.ToString("yyyy-MM-dd"));
  42. }
  43. private void btnx_parkingRecrodExport_Click(object sender, EventArgs e)
  44. {
  45. SaveRecord();
  46. }
  47. /// <summary>
  48. /// 保存记录为xls
  49. /// </summary>
  50. private void SaveRecord()
  51. {
  52. FolderBrowserDialog dialog = new FolderBrowserDialog();
  53. dialog.Description = "请选择日志将要导出的目标文件夹";
  54. if (dialog.ShowDialog() == DialogResult.OK)
  55. {
  56. if (string.IsNullOrEmpty(dialog.SelectedPath))
  57. {
  58. DialogResult answer = MessageBox.Show("文件夹路径为空\n使用默认位置" + Directory.GetCurrentDirectory() + "?", "提示", MessageBoxButtons.OKCancel);
  59. if (answer.Equals(DialogResult.OK))
  60. {
  61. Export(dgvx_parkingRecords, Directory.GetCurrentDirectory() + "\\", stc_recordManager.SelectedTab.Text);
  62. }
  63. else
  64. {
  65. return;
  66. }
  67. }
  68. else
  69. {
  70. DialogResult answer = MessageBox.Show("将日志保存到" + dialog.SelectedPath + "?", "提示", MessageBoxButtons.OKCancel);
  71. if (answer.Equals(DialogResult.OK))
  72. {
  73. Export(dgvx_parkingRecords, dialog.SelectedPath + "\\", stc_recordManager.SelectedTab.Text);
  74. }
  75. else
  76. {
  77. return;
  78. }
  79. }
  80. }
  81. }
  82. /// <summary>
  83. /// 导出excel文件
  84. /// </summary>
  85. /// <param name="dataGridView1"></param>
  86. /// <param name="path">绝对路径,"D:\\abc\\xxx.xls"</param>
  87. private void Export(DataGridViewX dataGridView1, string path,string name)
  88. {
  89. try
  90. {
  91. if (dataGridView1.Rows.Count == 0)
  92. {
  93. return;
  94. }
  95. Excel.Application excel = new Excel.Application();
  96. excel.Visible = false;
  97. Excel.Workbook workbook = excel.Workbooks.Add(true);
  98. Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];
  99. for (int i = 0; i < dataGridView1.Columns.Count; i++)
  100. {
  101. if (dataGridView1.Columns[i].Visible == true)
  102. {
  103. worksheet.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText;
  104. }
  105. }
  106. for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
  107. {
  108. System.Windows.Forms.Application.DoEvents();
  109. for (int j = 0; j < dataGridView1.Columns.Count; j++)
  110. {
  111. if (dataGridView1.Columns[j].Visible == true)
  112. {
  113. if (dataGridView1[j, i].ValueType == typeof(string))
  114. {
  115. worksheet.Cells[i + 2, j + 1] = "'" + dataGridView1[j, i].Value.ToString();
  116. }
  117. else
  118. {
  119. worksheet.Cells[i + 2, j + 1] = dataGridView1[j, i].Value.ToString();
  120. }
  121. }
  122. }
  123. }
  124. //设置禁止弹出保存和覆盖的询问提示框
  125. excel.DisplayAlerts = false;
  126. excel.AlertBeforeOverwriting = false;
  127. worksheet.Cells.Columns.AutoFit();
  128. //保存写入的数据,这里还没有保存到磁盘
  129. workbook.Saved = true;
  130. if (Directory.Exists(path))
  131. {
  132. //设置新建文件路径及名称
  133. string savePath = path + DateTime.Now.ToString("yyyy-MM-dd") + name +".xls";
  134. //创建文件
  135. FileStream file = new FileStream(savePath, FileMode.CreateNew);
  136. //关闭释放流,不然没办法写入数据
  137. file.Close();
  138. file.Dispose();
  139. //保存到指定的路径
  140. workbook.SaveCopyAs(savePath);
  141. }
  142. workbook.Close(false, Type.Missing, Type.Missing);
  143. //确保Excel进程关闭
  144. excel.Quit();
  145. //释放 COM 对象
  146. Marshal.ReleaseComObject(worksheet);
  147. Marshal.ReleaseComObject(workbook);
  148. Marshal.ReleaseComObject(excel);
  149. excel = null;
  150. worksheet = null;
  151. workbook = null;
  152. GC.Collect();//如果不使用这条语,excel会无法正常退出
  153. }
  154. catch (Exception e) { Console.WriteLine("导出excel文件异常," + e.Message); }
  155. }
  156. }
  157. }