Browse Source

添加导出人员数据

章政 7 years ago
parent
commit
3f4363f02e

+ 32 - 15
UAS_CheckWork/Form1.Designer.cs

@@ -36,11 +36,13 @@
             this.btnConnect = new System.Windows.Forms.Button();
             this.lblState = new System.Windows.Forms.Label();
             this.showDataGrid = new System.Windows.Forms.DataGridView();
+            this.cl_cardcode = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.cl_time = new System.Windows.Forms.DataGridViewTextBoxColumn();
             this.getAllData = new System.Windows.Forms.Button();
             this.allData = new System.Windows.Forms.BindingSource(this.components);
             this.dataGridViewCheckBoxColumn1 = new System.Windows.Forms.DataGridViewCheckBoxColumn();
-            this.cl_cardcode = new System.Windows.Forms.DataGridViewTextBoxColumn();
-            this.cl_time = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.ExportEmp = new System.Windows.Forms.Button();
+            this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog();
             ((System.ComponentModel.ISupportInitialize)(this.showDataGrid)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.allData)).BeginInit();
             this.SuspendLayout();
@@ -123,6 +125,21 @@
             this.showDataGrid.TabIndex = 16;
             this.showDataGrid.DataError += new System.Windows.Forms.DataGridViewDataErrorEventHandler(this.showDataGrid_DataError);
             // 
+            // cl_cardcode
+            // 
+            this.cl_cardcode.DataPropertyName = "cl_cardcode";
+            this.cl_cardcode.HeaderText = "卡号";
+            this.cl_cardcode.Name = "cl_cardcode";
+            this.cl_cardcode.Width = 200;
+            // 
+            // cl_time
+            // 
+            this.cl_time.DataPropertyName = "cl_time";
+            this.cl_time.HeaderText = "打卡时间";
+            this.cl_time.MinimumWidth = 250;
+            this.cl_time.Name = "cl_time";
+            this.cl_time.Width = 250;
+            // 
             // getAllData
             // 
             this.getAllData.BackColor = System.Drawing.SystemColors.ControlLightLight;
@@ -140,26 +157,24 @@
             this.dataGridViewCheckBoxColumn1.HeaderText = "勾选";
             this.dataGridViewCheckBoxColumn1.Name = "dataGridViewCheckBoxColumn1";
             // 
-            // cl_cardcode
-            // 
-            this.cl_cardcode.DataPropertyName = "cl_cardcode";
-            this.cl_cardcode.HeaderText = "卡号";
-            this.cl_cardcode.Name = "cl_cardcode";
-            this.cl_cardcode.Width = 200;
-            // 
-            // cl_time
+            // ExportEmp
             // 
-            this.cl_time.DataPropertyName = "cl_time";
-            this.cl_time.HeaderText = "打卡时间";
-            this.cl_time.MinimumWidth = 250;
-            this.cl_time.Name = "cl_time";
-            this.cl_time.Width = 250;
+            this.ExportEmp.BackColor = System.Drawing.SystemColors.ControlLightLight;
+            this.ExportEmp.Location = new System.Drawing.Point(682, 18);
+            this.ExportEmp.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
+            this.ExportEmp.Name = "ExportEmp";
+            this.ExportEmp.Size = new System.Drawing.Size(102, 25);
+            this.ExportEmp.TabIndex = 18;
+            this.ExportEmp.Text = "导出人员数据";
+            this.ExportEmp.UseVisualStyleBackColor = false;
+            this.ExportEmp.Click += new System.EventHandler(this.ExportEmp_Click);
             // 
             // Form1
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
             this.ClientSize = new System.Drawing.Size(823, 451);
+            this.Controls.Add(this.ExportEmp);
             this.Controls.Add(this.getAllData);
             this.Controls.Add(this.showDataGrid);
             this.Controls.Add(this.lblState);
@@ -193,6 +208,8 @@
         private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn1;
         private System.Windows.Forms.DataGridViewTextBoxColumn cl_cardcode;
         private System.Windows.Forms.DataGridViewTextBoxColumn cl_time;
+        private System.Windows.Forms.Button ExportEmp;
+        private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog1;
     }
 }
 

+ 38 - 0
UAS_CheckWork/Form1.cs

@@ -164,5 +164,43 @@ namespace UAS_CheckWork
         {
 
         }
+
+        private void ExportEmp_Click(object sender, EventArgs e)
+        {
+            if (!bIsConnected)
+            {
+                MessageBox.Show("请先连接设备", "Error");
+                return;
+            }
+            folderBrowserDialog1.Description = "选择导出的路径";
+            DialogResult result = folderBrowserDialog1.ShowDialog();
+            if (result == DialogResult.OK)
+            {
+                string FolderPath = folderBrowserDialog1.SelectedPath;
+                string EMenrollNumber = "";
+                string Name = "";
+                string Pwd = "";
+                int Privilege = 0;
+                bool Enable = false;
+                DataTable dt = new DataTable();
+                dt.Columns.Add("卡号");
+                dt.Columns.Add("姓名");
+                dt.Columns.Add("密码");
+                dt.Columns.Add("权限");
+                dt.Columns.Add("是否可用");
+                while (axCZKEM1.SSR_GetAllUserInfo(iMachineNumber, out EMenrollNumber, out Name, out Pwd, out Privilege, out Enable))
+                {
+                    DataRow dr = dt.NewRow();
+                    dr["卡号"] = EMenrollNumber;
+                    dr["姓名"] = Name;
+                    dr["密码"] = Pwd;
+                    dr["权限"] = Privilege;
+                    dr["是否可用"] = Enable;
+                    dt.Rows.Add(dr);
+                }
+                ExcelHandler ex = new ExcelHandler();
+                ex.ExportExcel(dt, FolderPath);
+            }
+        }
     }
 }

+ 9 - 0
UAS_CheckWork/Form1.resx

@@ -123,7 +123,16 @@
   <metadata name="cl_time.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
+  <metadata name="cl_cardcode.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="cl_time.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
   <metadata name="allData.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>17, 17</value>
   </metadata>
+  <metadata name="folderBrowserDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>110, 17</value>
+  </metadata>
 </root>

+ 1 - 1
UAS_CheckWork/Tools/DataHelper.cs

@@ -11,7 +11,7 @@ namespace Check.DataOperate
     class DataHelper
     {
         //系统默认的的连接字符串
-        private string ConnectionStrings = "Connection Timeout=0;Pooling=false;Password=select!#%*(;User ID=DATACENTER;Pooling=false;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.88)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)));";
+        private string ConnectionStrings = "Connection Timeout=0;Pooling=false;Password=select!#%*(;User ID=DATACENTER;Pooling=false;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.10.88)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)));";
         //用户选择的数据库的连接字符串
         public static string DBConnectionString;
         public static OracleConnection connection = null;

+ 242 - 0
UAS_CheckWork/Tools/ExcelHandler.cs

@@ -0,0 +1,242 @@
+using System.IO;
+using System.Data;
+using System;
+using NPOI.HSSF.UserModel;
+using NPOI.SS.UserModel;
+using NPOI.HSSF.Util;
+using NPOI.SS.Formula.Eval;
+using System.Text;
+
+namespace Check.DataOperate
+{
+    class ExcelHandler
+    {
+        DataHelper dh = new DataHelper();
+        /// <summary>
+        /// 导出Excel,返回文件在客户端的路径
+        /// </summary>
+        public string ExportExcel(DataTable dt, string FolderPath)
+        {
+            //创建一个内存流,用来接收转换成Excel的内容
+            MemoryStream ms;
+            ms = DataTableToExcel(dt);
+            //以系统当前时间命名文件,FileMode.Create表示创建文件,FileAccess.Write表示拥有写的权限
+            string filePath = @FolderPath + "\\" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
+            FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write);
+            byte[] data = ms.ToArray();
+            fs.Write(data, 0, data.Length);
+            fs.Flush();
+            //释放当前Excel文件,否则打开文件的时候会显示文件被占用
+            ms.Dispose();
+            fs.Dispose();
+            return filePath;
+        }
+
+        /// <summary>
+        /// 导入Excel
+        /// </summary>
+        public DataTable ImportExcel(string FolderPath, string TableName)
+        {
+            DataTable dt = new DataTable();
+            dt.TableName = TableName;
+            if (FolderPath.Contains(".xls") || FolderPath.Contains(".xlsx"))
+            {
+                using (FileStream file = new FileStream(FolderPath, FileMode.Open, FileAccess.Read))
+                {
+                    //获取文件流
+                    HSSFWorkbook workbook = new HSSFWorkbook(file);
+                    ISheet sheet = workbook.GetSheetAt(0);
+                    //获取所有的列名
+                    foreach (ICell item in sheet.GetRow(sheet.FirstRowNum).Cells)
+                    {
+                        dt.Columns.Add(item.ToString(), typeof(string));
+                    }
+
+                    System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
+                    while (rows.MoveNext())
+                    {
+                        IRow row = (HSSFRow)rows.Current;
+                        if (row.RowNum == sheet.FirstRowNum)
+                        {
+                            continue;
+                        }
+
+                        DataRow dr = dt.NewRow();
+                        foreach (ICell item in row.Cells)
+                        {
+                            switch (item.CellType)
+                            {
+                                case CellType.BOOLEAN:
+                                    dr[item.ColumnIndex] = item.BooleanCellValue;
+                                    break;
+                                case CellType.ERROR:
+                                    dr[item.ColumnIndex] = ErrorEval.GetText(item.ErrorCellValue);
+                                    break;
+                                case CellType.FORMULA:
+                                    switch (item.CachedFormulaResultType)
+                                    {
+                                        case CellType.BOOLEAN:
+                                            dr[item.ColumnIndex] = item.BooleanCellValue;
+                                            break;
+                                        case CellType.ERROR:
+                                            dr[item.ColumnIndex] = ErrorEval.GetText(item.ErrorCellValue);
+                                            break;
+                                        case CellType.NUMERIC:
+                                            if (DateUtil.IsCellDateFormatted(item))
+                                            {
+                                                dr[item.ColumnIndex] = item.DateCellValue.ToString("yyyy-MM-dd hh:MM:ss");
+                                            }
+                                            else
+                                            {
+                                                dr[item.ColumnIndex] = item.NumericCellValue;
+                                            }
+                                            break;
+                                        case CellType.STRING:
+                                            string str = item.StringCellValue;
+                                            if (!string.IsNullOrEmpty(str))
+                                            {
+                                                dr[item.ColumnIndex] = str.ToString();
+                                            }
+                                            else
+                                            {
+                                                dr[item.ColumnIndex] = null;
+                                            }
+                                            break;
+                                        case CellType.Unknown:
+                                        case CellType.BLANK:
+                                        default:
+                                            dr[item.ColumnIndex] = string.Empty;
+                                            break;
+                                    }
+                                    break;
+                                case CellType.NUMERIC:
+                                    if (DateUtil.IsCellDateFormatted(item))
+                                    {
+                                        dr[item.ColumnIndex] = item.DateCellValue.ToString("yyyy-MM-dd hh:MM:ss");
+                                    }
+                                    else
+                                    {
+                                        dr[item.ColumnIndex] = item.NumericCellValue;
+                                    }
+                                    break;
+                                case CellType.STRING:
+                                    string strValue = item.StringCellValue;
+                                    if (string.IsNullOrEmpty(strValue))
+                                    {
+                                        dr[item.ColumnIndex] = strValue.ToString();
+                                    }
+                                    else
+                                    {
+                                        dr[item.ColumnIndex] = null;
+                                    }
+                                    break;
+                                case CellType.Unknown:
+                                case CellType.BLANK:
+                                default:
+                                    dr[item.ColumnIndex] = string.Empty;
+                                    break;
+                            }
+                        }
+                        dt.Rows.Add(dr);
+                    }
+                }
+            }
+            return dt;
+        }
+
+        public void WriteTxt(DataTable dt, string FolderPath, string FileName)
+        {
+            StreamWriter sr;
+            string filePath = @FolderPath;
+            string report;
+            if (File.Exists(filePath + "\\" + FileName))   //如果文件存在,则创建File.AppendText对象   
+            {
+                File.Delete(filePath + "\\" + FileName);
+            }
+            sr = File.CreateText(filePath + "\\" + FileName);
+            StringBuilder sb = new StringBuilder();
+            string Title = "";
+            foreach (DataColumn dc in dt.Columns)
+            {
+                Title += String.Format("{0,10}", dc.ColumnName.ToString());
+            }
+            sr.WriteLine(Title + "\r");
+            foreach (DataRow dr in dt.Rows)
+            {
+                string text = "";
+                for (int i = 0; i < dt.Columns.Count; i++)
+                {
+                    text += String.Format("{0,10}", dr[i].ToString());
+                }
+                sr.WriteLine(text + "\r");
+            }
+            sr.Close();
+        }
+
+        /// <summary>
+        /// 将DataTable形式的数据转成Excel格式的,然后用字节流的形式写入文件
+        /// </summary>
+        /// <param name="DataTable"></param>
+        /// <returns></returns>
+        public MemoryStream DataTableToExcel(DataTable DataTable)
+        {
+            //创建内存流
+            MemoryStream ms = new MemoryStream();
+            //创建一个Book,相当于一个Excel文件
+            HSSFWorkbook book = new HSSFWorkbook();
+            //Excel中的Sheet
+            ISheet sheet = book.CreateSheet("sheet1");
+            //获取行数量和列数量
+            int rowNum = DataTable.Rows.Count;
+            int columnNum = DataTable.Columns.Count;
+            //设置列的宽度,根据首行的列的内容的长度来设置
+            for (int i = 0; i < columnNum; i++)
+            {
+                int dataLength = DataTable.Columns[i].ColumnName.Length;
+                sheet.SetColumnWidth(i, dataLength * 700);
+            }
+            //首先画好第一行带颜色的,单独写出来,避免写在循环里面
+            IRow row = sheet.CreateRow(0);
+            //冻结第一行
+            sheet.CreateFreezePane(0, 1, 0, 1);
+            ICellStyle style = book.CreateCellStyle();
+            style.FillForegroundColor = HSSFColor.PALE_BLUE.index;
+            style.FillPattern = FillPatternType.BIG_SPOTS;
+            style.FillBackgroundColor = HSSFColor.LIGHT_GREEN.index;
+            //设置边框
+            style.BorderBottom = BorderStyle.THICK;
+            style.BorderLeft = BorderStyle.THICK;
+            style.BorderRight = BorderStyle.THICK;
+            style.BorderTop = BorderStyle.THICK;
+            row.HeightInPoints = 20;
+            //固定第一行
+            //row.RowStyle.IsLocked=true;
+            //给第一行的标签赋值样式和值
+            for (int j = 0; j < columnNum; j++)
+            {
+                row.CreateCell(j);
+                row.Cells[j].CellStyle = style;
+                row.Cells[j].CellStyle.VerticalAlignment = VerticalAlignment.CENTER;
+                row.Cells[j].CellStyle.Alignment = HorizontalAlignment.CENTER;
+                row.Cells[j].SetCellValue(DataTable.Columns[j].ColumnName);
+            }
+
+            //将DataTable的值循环赋值给book,Aligment设置居中
+            //之前已经画了带颜色的第一行,所以从i=1开始画
+            for (int i = 0; i < rowNum; i++)
+            {
+                IRow row1 = sheet.CreateRow(i + 1);
+                row1.HeightInPoints = 20;
+                for (int j = 0; j < columnNum; j++)
+                {
+                    row1.CreateCell(j);
+                    row1.Cells[j].SetCellValue(DataTable.Rows[i][j].ToString());
+                    row1.GetCell(j).CellStyle.VerticalAlignment = VerticalAlignment.CENTER;
+                }
+            }
+            //将book的内容写入内存流中返回
+            book.Write(ms);
+            return ms;
+        }
+    }
+}

BIN
UAS_CheckWork/Tools/NPOI.dll


BIN
UAS_CheckWork/tool/NPOI.dll