Beispiel #1
0
        private void Proc(object LockWatingThread)
        {
            Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
            try
            {
                app.Visible = false;
                Workbook  wBook = app.Workbooks.Add(true);
                Worksheet wSheet;
                for (int i = 0; i < wBook.Worksheets.Count - 1; i++)
                {
                    wSheet = (Worksheet)wBook.Worksheets[i + 1];
                    wSheet.Delete();
                }
                for (int i = 0; i < SheetCount - 1; i++)
                {
                    wBook.Worksheets.Add();
                }
                wp.SetCursorStyle(Cursors.Default);
                int percent = 0;
                wp.SetProcessBar(percent);
                while (SheetIndex <= SheetCount)
                {
                    ExcelWorkbookCallbackProc(wBook, SheetIndex, -1);//用于回调函数执行列标题定义操作
                    if (Count == -1)
                    {
                        int itemIndex = 0;
                        while (true)
                        {
                            percent++;
                            if (percent == 10000)
                            {
                                percent = 0;
                            }
                            wp.SetProcessBar(percent / 100);
                            lock (LockWatingThread)
                            {
                                if (!ExcelWorkbookCallbackProc(wBook, SheetIndex, itemIndex++))
                                {
                                    break;
                                }
                                if (itemIndex > 65530)
                                {
//                                     MessageBox.Show("条目过多,只导出前65530条");
//                                     break;
                                    break;
                                }
                            }
                            if (wp.HasBeenCancelled())
                            {
                                app.DisplayAlerts = false;
                                app.Quit();
                                return;
                            }
                        }
                    }
                    else
                    {
                        for (int i = 0; i < Count; i++)
                        {
                            percent++;
                            wp.SetProcessBar(percent * 100 / Count / SheetCount);
                            lock (LockWatingThread)
                            {
                                if (!ExcelWorkbookCallbackProc(wBook, SheetIndex, i))
                                {
                                    break;
                                }
                            }
                            if (wp.HasBeenCancelled())
                            {
                                app.DisplayAlerts = false;
                                app.Quit();
                                return;
                            }
                        }
                    }
                    ExcelWorkbookCallbackProc(wBook, SheetIndex, int.MaxValue); //全部导出完成,用于回调函数执行整体界面设定
                    SheetIndex++;
                }
                wp.SetProcessBar(100);
                if (bShowExcel)
                {
                    app.Visible     = true;
                    app.WindowState = XlWindowState.xlMaximized;
                }
                else
                {
                    app.Quit();
                }
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("导出Excel出错!错误原因" + ex.Message);
                app.DisplayAlerts = false;
                app.Quit();
                return;
            }
        }
Beispiel #2
0
 private void Proc(object LockWatingThread)
 {
     Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
     try
     {
         app.Visible = false;
         Workbook wBook = app.Workbooks.Add(true);
         wp.SetCursorStyle(Cursors.Default);
         ExcelWorkbookCallbackProc(wBook, -1);//用于回调函数执行列标题定义操作
         int percent = 0;
         if (Count == -1)
         {
             Count = 0;
             while (true)
             {
                 percent++;
                 if (percent == 10000)
                 {
                     percent = 0;
                 }
                 wp.SetProcessBar(percent / 100);
                 lock (LockWatingThread)
                 {
                     if (!ExcelWorkbookCallbackProc(wBook, Count++))
                     {
                         break;
                     }
                     wp.SetProcessBar(100);
                     if (Count > 65530)
                     {
                         MessageBox.Show("条目过多,只导出前65530条");
                         break;
                     }
                 }
                 if (wp.HasBeenCancelled())
                 {
                     app.DisplayAlerts = false;
                     app.Quit();
                     return;
                 }
             }
         }
         else
         {
             for (int i = 0; i < Count; i++)
             {
                 percent++;
                 wp.SetProcessBar(percent * 100 / Count);
                 lock (LockWatingThread)
                 {
                     if (!ExcelWorkbookCallbackProc(wBook, i))
                     {
                         break;
                     }
                 }
                 if (wp.HasBeenCancelled())
                 {
                     app.DisplayAlerts = false;
                     app.Quit();
                     return;
                 }
             }
         }
         ExcelWorkbookCallbackProc(wBook, int.MaxValue); //全部导出完成,用于回调函数执行整体界面设定
         app.Visible     = true;
         app.WindowState = XlWindowState.xlMaximized;
     }
     catch (System.Exception ex)
     {
         MessageBox.Show("导出Excel出错!错误原因" + ex.Message);
         app.DisplayAlerts = false;
         app.Quit();
         return;
     }
 }