代码改变世界

ListViewToExcel

2016-10-27 16:18  Moon-明月  阅读(220)  评论(0)    收藏  举报
        /// <summary>
        /// 将LIstView导出到Excel
        /// </summary>
        /// <param name="listView1"></param>
        /// <param name="sheet1"></param>
         public void TurnToExcel(ListView listView1, string sheet1)
        {
            lv_KQ.Items.Clear();

            int iE = ReadWorkNumEnd();
            MakeWorkAttendance(3, iE);

            string Sheetname = sheet1;
            ListView listView = listView1;
            if (listView.Items.Count < 1)
                return;
            try
            {
                ExcelApplication MyExcel = new ExcelApplication();

                MyExcel.Visible = true;   //display excel application;if value set 'false',please enable the ' finally' code below;
                if (MyExcel == null)
                {
                    return;
                }

                Workbooks MyWorkBooks = (Workbooks)MyExcel.Workbooks;

                Workbook MyWorkBook = (Workbook)MyWorkBooks.Add(Missing.Value);

                Worksheet MyWorkSheet = (Worksheet)MyWorkBook.Worksheets[1];

                Range MyRange = MyWorkSheet.get_Range("A1", "H1");

                MyRange = MyRange.get_Resize(1, listView.Columns.Count);
                object[] MyHeader = new object[listView.Columns.Count];
                for (int i = 0; i < listView.Columns.Count; i++)
                {
                    MyHeader.SetValue(listView.Columns[i].Text, i);
                }
                MyRange.Value2 = MyHeader;
                MyWorkSheet.Name = Sheetname;

                if (listView.Items.Count > 0)
                {
                    MyRange = MyWorkSheet.get_Range("A2", Missing.Value);
                    object[,] MyData = new Object[listView.Items.Count, listView.Columns.Count];
                    for (int j = 0; j < listView1.Items.Count; j++)
                    {
                        ListViewItem lvi = listView1.Items[j];

                        for (int k = 0; k < lvi.SubItems.Count; k++)
                        {
                            if (string.IsNullOrEmpty(lvi.SubItems[k].Text))
                            {
                                MyData[j, k] = "";
                            }
                            else
                            {
                                MyData[j, k] = lvi.SubItems[k].Text;
                            }
                            //判断迟到早退给导出的Excel的整行填充颜色
                            if (k == 3 && !string.IsNullOrEmpty(lvi.SubItems[k].Text) && lvi.SubItems[k].Text.ToString().Length>1)//上班时间
                            {
                                DateTime date1 = Convert.ToDateTime(lvi.SubItems[k].Text);
                                DateTime date2 = Convert.ToDateTime("08:00");
                                TimeSpan timeSpan = date1 - date2;
                                if (timeSpan.TotalMinutes>0)
                                {
                                    //设置第10行为红色
                                    //MyWorkSheet.get_Range((Microsoft.Office.Interop.Excel.Range)MyWorkSheet.Rows[j+1], (Microsoft.Office.Interop.Excel.Range)MyWorkSheet.Rows[j]).Select();
                                    MyWorkSheet.get_Range((Microsoft.Office.Interop.Excel.Range)MyWorkSheet.Rows[j+2], (Microsoft.Office.Interop.Excel.Range)MyWorkSheet.Rows[j+2]).Interior.ColorIndex = 3; 
                                }
                            }
                            if (k == 4 && !string.IsNullOrEmpty(lvi.SubItems[k].Text) && lvi.SubItems[k].Text.ToString().Length > 1)//下班时间
                            {
                                DateTime date1 = Convert.ToDateTime(lvi.SubItems[k].Text);
                                DateTime date2 = Convert.ToDateTime("17:00");
                                TimeSpan timeSpan = date1 - date2;
                                if (timeSpan.TotalMinutes<0)
                                {
                                    //设置第10行为红色Rows[j]---Cella[j,k]
                                    //MyWorkSheet.get_Range((Microsoft.Office.Interop.Excel.Range)MyWorkSheet.Rows[j], (Microsoft.Office.Interop.Excel.Range)MyWorkSheet.Rows[j]).Select();
                                    MyWorkSheet.get_Range((Microsoft.Office.Interop.Excel.Range)MyWorkSheet.Rows[j+2], (Microsoft.Office.Interop.Excel.Range)MyWorkSheet.Rows[j+2]).Interior.ColorIndex = 3;
                                }
                            }
                        }
                    }

                    MyRange = MyRange.get_Resize(listView.Items.Count, listView.Columns.Count);
                    MyRange.Value2 = MyData;
                    MyRange.EntireColumn.AutoFit();

                    //my
                    MyRange.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;//水平居中  
                    MyRange.VerticalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter;//垂直居中  
                    MyRange.EntireRow.AutoFit();//单元格行高自动调整
                }

                try
                {
                    object missing = System.Reflection.Missing.Value;
                    MyWorkBook.Saved = true;
                    MyWorkBook.SaveAs(saveFileDialog1.FileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, missing, missing, false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing, missing);
                }
                catch (Exception e1)
                {
                    ErrorLog.WriteError("Export Error,Maybe the file is opened by other application!\n" + e1.Message);
                }
            }
            catch (Exception Err)
            {
                ErrorLog.WriteError(Err.ToString());
            }
        }