duhe
2023-05-31 7471f7ba4991636fa75d8f474687815eee583a21
引出功能修复
2个文件已修改
408 ■■■■■ 已修改文件
DBUtility/基础资料/Gy_BaseFun.cs 404 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WorkM/报表分析/Sc_ICMOWorkCompleteSet.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DBUtility/»ù´¡×ÊÁÏ/Gy_BaseFun.cs
@@ -652,79 +652,142 @@
        public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);
        public static void DataToExcel(string sText, DataGridView grdMain)
        {
            string saveFileName = "";
            bool fileSaved = false;
            SaveFileDialog saveDialog = new SaveFileDialog();
            Excel.Application xlApp = new Excel.Application();
            if (Convert.ToDouble(xlApp.Version) < 12)
            //string saveFileName = "";
            //bool fileSaved = false;
            //SaveFileDialog saveDialog = new SaveFileDialog();
            //Excel.Application xlApp = new Excel.Application();
            //if (Convert.ToDouble(xlApp.Version) < 12)
            //{
            //    saveDialog.DefaultExt = "xls";
            //    saveDialog.Filter = "Excel文件|*.xls";
            //}
            //else
            //{
            //    saveDialog.DefaultExt = "xlsx";
            //    saveDialog.Filter = "Excel文件|*.xlsx";
            //}
            //saveDialog.FileName = sText;
            //saveDialog.ShowDialog();
            //saveFileName = saveDialog.FileName;
            //if (saveFileName.IndexOf(":") < 0) return; //被点了取消
            ////
            //if (xlApp == null)
            //{
            //    MessageBox.Show("无法创建Excel文件,可能您的电脑未安装Excel", "提示");
            //    return;
            //}
            //Excel.Workbooks workbooks = xlApp.Workbooks;
            //Excel.Workbook workbook = workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
            //Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
            ////写入 æ ‡é¢˜
            //for (int i = 0; i < grdMain.ColumnCount; i++)
            //{
            //    worksheet.Cells[1, i + 1] = ClsPub.isStrNull(grdMain.Columns[i].HeaderText);
            //}
            ////写入内容
            //for (int r = 0; r < grdMain.RowCount; r++)
            //{
            //    for (int i = 0; i < grdMain.ColumnCount; i++)
            //    {
            //        worksheet.Cells[r + 2, i + 1] = "'" + ClsPub.isStrNull(grdMain.Rows[r].Cells[i].Value);
            //    }
            //    System.Windows.Forms.Application.DoEvents();
            //}
            //worksheet.Columns.EntireColumn.AutoFit();//列宽自适应。
            //if (saveFileName != "")
            //{
            //    try
            //    {
            //        workbook.Saved = true;
            //        workbook.SaveCopyAs(saveFileName);
            //        fileSaved = true;
            //    }
            //    catch (Exception ex)
            //    {
            //        fileSaved = false;
            //        MessageBox.Show(  "导出文件时出错,文件可能正被打开!\n" + ex.Message, "提示");
            //    }
            //}
            //else
            //{
            //    fileSaved = false;
            //}
            //xlApp.Quit();
            ////
            //IntPtr t = new IntPtr(xlApp.Hwnd); //得到这个句柄,具体作用是得到这块内存入口
            //int k = 0;
            //GetWindowThreadProcessId(t, out k); //得到本进程唯一标志k
            //System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k); //得到对进程k的引用
            //p.Kill(); //关闭进程k
            //xlApp = null;
            ////GC.Collect();//强行销毁
            ////if (fileSaved && System.IO.File.Exists(saveFileName)) System.Diagnostics.Process.Start(saveFileName); //打开EXCEL
            //MessageBox.Show("引出完毕!");
            SaveFileDialog saveFileDialog = new SaveFileDialog();
            saveFileDialog.Filter = "Execl文件(*.xls)|*.xls";
            saveFileDialog.FilterIndex = 0;
            saveFileDialog.RestoreDirectory = true;
            saveFileDialog.CreatePrompt = true;
            saveFileDialog.Title = "数据视图导出EXCEL文件";
            saveFileDialog.ShowDialog();
            if (saveFileDialog.FileName == "")
            {
                saveDialog.DefaultExt = "xls";
                saveDialog.Filter = "Excel文件|*.xls";
            }
            else
            {
                saveDialog.DefaultExt = "xlsx";
                saveDialog.Filter = "Excel文件|*.xlsx";
            }
            saveDialog.FileName = sText;
            saveDialog.ShowDialog();
            saveFileName = saveDialog.FileName;
            if (saveFileName.IndexOf(":") < 0) return; //被点了取消
            //
            if (xlApp == null)
            {
                MessageBox.Show("无法创建Excel文件,可能您的电脑未安装Excel", "提示");
                return;
            }
            Excel.Workbooks workbooks = xlApp.Workbooks;
            Excel.Workbook workbook = workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
            Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
            //写入 æ ‡é¢˜
            for (int i = 0; i < grdMain.ColumnCount; i++)
            Stream myStream;
            myStream = saveFileDialog.OpenFile();
            StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding("gb2312"));
            string str = "";
            DateTime start = DateTime.Now;
            try
            {
                worksheet.Cells[1, i + 1] = ClsPub.isStrNull(grdMain.Columns[i].HeaderText);
            }
            //写入内容
            for (int r = 0; r < grdMain.RowCount; r++)
            {
                //写标题
                for (int i = 0; i < grdMain.ColumnCount; i++)
                {
                    worksheet.Cells[r + 2, i + 1] = "'" + ClsPub.isStrNull(grdMain.Rows[r].Cells[i].Value);
                    if (i > 0)
                    {
                        str += "\t";
                    }
                    str += grdMain.Columns[i].HeaderText;
                }
                System.Windows.Forms.Application.DoEvents();
            }
            worksheet.Columns.EntireColumn.AutoFit();//列宽自适应。
            if (saveFileName != "")
            {
                try
                sw.WriteLine(str);
                //写内容
                for (int j = 0; j < grdMain.Rows.Count; j++)
                {
                    workbook.Saved = true;
                    workbook.SaveCopyAs(saveFileName);
                    fileSaved = true;
                    string tempStr = "";
                    for (int k = 0; k < grdMain.Columns.Count; k++)
                    {
                        if (k > 0)
                        {
                            tempStr += "\t";
                        }
                        if (grdMain.Rows[j].Cells[k].Value == null)
                        {
                            tempStr += string.Empty;
                        }
                        else
                        {
                            tempStr += grdMain.Rows[j].Cells[k].Value.ToString().Replace("\"", "”");
                        }
                    }
                    sw.WriteLine(tempStr);
                }
                catch (Exception ex)
                {
                    fileSaved = false;
                    MessageBox.Show(  "导出文件时出错,文件可能正被打开!\n" + ex.Message, "提示");
                }
                sw.Close();
                myStream.Close();
            }
            else
            catch (Exception ex)
            {
                fileSaved = false;
                MessageBox.Show(ex.Message);
            }
            xlApp.Quit();
            //
            IntPtr t = new IntPtr(xlApp.Hwnd); //得到这个句柄,具体作用是得到这块内存入口
            int k = 0;
            GetWindowThreadProcessId(t, out k); //得到本进程唯一标志k
            System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k); //得到对进程k的引用
            p.Kill(); //关闭进程k
            xlApp = null;
            //GC.Collect();//强行销毁
            //if (fileSaved && System.IO.File.Exists(saveFileName)) System.Diagnostics.Process.Start(saveFileName); //打开EXCEL
            MessageBox.Show("引出完毕!");
            finally
            {
                sw.Close();
                myStream.Close();
            }
            MessageBox.Show("将此工作表导出为excel共耗时:" + DateTime.Now.Subtract(start).TotalMilliseconds.ToString() + "毫秒");
        }
@@ -957,99 +1020,162 @@
        //导出选中列
        public static void Data2Excel(string sText, DataGridView grdMain, string KeyItem)
        {
            string saveFileName = "";
            bool fileSaved = false;
            List<string> hide = GetGridViewHide(grdMain, KeyItem);
            if(hide.Count == 0)
            {
                DataToExcel(sText, grdMain);
                return;
            }
            SaveFileDialog saveDialog = new SaveFileDialog();
            Excel.Application xlApp = new Excel.Application();
            if (xlApp == null)
            {
                MessageBox.Show("无法创建Excel文件,可能您的电脑未安装Excel", "提示");
                return;
            }
             string av = xlApp.Version;
             if (Convert.ToDouble(xlApp.Version) < 12)
             {
                 saveDialog.DefaultExt = "xls";
                 saveDialog.Filter = "Excel文件|*.xls";
             }
             else
             {
                 saveDialog.DefaultExt = "xlsx";
                 saveDialog.Filter = "Excel文件|*.xlsx";
             }
            saveDialog.FileName = sText;
            saveDialog.ShowDialog();
            saveFileName = saveDialog.FileName;
            if (saveFileName.IndexOf(":") < 0) return; //被点了取消
            //string saveFileName = "";
            //bool fileSaved = false;
            //List<string> hide = GetGridViewHide(grdMain, KeyItem);
            //if(hide.Count == 0)
            //{
            //    DataToExcel(sText, grdMain);
            //    return;
            //}
            //SaveFileDialog saveDialog = new SaveFileDialog();
            //Excel.Application xlApp = new Excel.Application();
            //if (xlApp == null)
            //{
            //    MessageBox.Show("无法创建Excel文件,可能您的电脑未安装Excel", "提示");
            //    return;
            //}
            // string av = xlApp.Version;
            // if (Convert.ToDouble(xlApp.Version) < 12)
            // {
            //     saveDialog.DefaultExt = "xls";
            //     saveDialog.Filter = "Excel文件|*.xls";
            // }
            // else
            // {
            //     saveDialog.DefaultExt = "xlsx";
            //     saveDialog.Filter = "Excel文件|*.xlsx";
            // }
            //saveDialog.FileName = sText;
            //saveDialog.ShowDialog();
            //saveFileName = saveDialog.FileName;
            //if (saveFileName.IndexOf(":") < 0) return; //被点了取消
            Excel.Workbooks workbooks = xlApp.Workbooks;
            Excel.Workbook workbook = workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
            Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];   //取得sheet1
            //写入 æ ‡é¢˜
            for (int i = 0; i < hide.Count; i++)
            {
                worksheet.Cells[1, i + 1] = hide[i];
            }
            for (int r = 0; r < grdMain.RowCount; r++)
            {
                for (int i = 0; i < hide.Count; i++)
                {
                    worksheet.Cells[r + 2, i + 1] = "" + ClsPub.isStrNull(grdMain.Rows[r].Cells[DBUtility.Gy_BaseFun.Fun_GetCol(hide[i], grdMain)].Value);
                    //worksheet.Cells[r + 2, i + 1] =   grdMain.Rows[r].Cells[DBUtility.Gy_BaseFun.Fun_GetCol(hide[i], grdMain)].Value;
                }
                System.Windows.Forms.Application.DoEvents();
            }
            //Excel.Workbooks workbooks = xlApp.Workbooks;
            //Excel.Workbook workbook = workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
            //Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];   //取得sheet1
            ////写入 æ ‡é¢˜
            //for (int i = 0; i < hide.Count; i++)
            //{
            //    worksheet.Cells[1, i + 1] = hide[i];
            //}
            //for (int r = 0; r < grdMain.RowCount; r++)
            //{
            //    for (int i = 0; i < grdMain.ColumnCount; i++)
            //    for (int i = 0; i < hide.Count; i++)
            //    {
            //        worksheet.Cells[r + 2, i + 1] = "'" + ClsPub.isStrNull(grdMain.Rows[r].Cells[i].Value);
            //        worksheet.Cells[r + 2, i + 1] = "" + ClsPub.isStrNull(grdMain.Rows[r].Cells[DBUtility.Gy_BaseFun.Fun_GetCol(hide[i], grdMain)].Value);
            //        //worksheet.Cells[r + 2, i + 1] =   grdMain.Rows[r].Cells[DBUtility.Gy_BaseFun.Fun_GetCol(hide[i], grdMain)].Value;
            //    }
            //    System.Windows.Forms.Application.DoEvents();
            //}
            ////for (int r = 0; r < grdMain.RowCount; r++)
            ////{
            ////    for (int i = 0; i < grdMain.ColumnCount; i++)
            ////    {
            ////        worksheet.Cells[r + 2, i + 1] = "'" + ClsPub.isStrNull(grdMain.Rows[r].Cells[i].Value);
            ////    }
            ////    System.Windows.Forms.Application.DoEvents();
            ////}
            worksheet.Columns.EntireColumn.AutoFit();//列宽自适应。
            if (saveFileName != "")
            //worksheet.Columns.EntireColumn.AutoFit();//列宽自适应。
            //if (saveFileName != "")
            //{
            //    try
            //    {
            //        workbook.Saved = true;
            //        workbook.SaveCopyAs(saveFileName);
            //        fileSaved = true;
            //    }
            //    catch (Exception ex)
            //    {
            //        fileSaved = false;
            //        MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message, "提示");
            //    }
            //}
            //else
            //{
            //    fileSaved = false;
            //}
            //xlApp.Quit();
            ////
            //IntPtr t = new IntPtr(xlApp.Hwnd); //得到这个句柄,具体作用是得到这块内存入口
            //int k = 0;
            //GetWindowThreadProcessId(t, out k); //得到本进程唯一标志k
            //System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k); //得到对进程k的引用
            //p.Kill(); //关闭进程k
            //xlApp = null;
            ////GC.Collect();//强行销毁
            ////if (fileSaved && System.IO.File.Exists(saveFileName)) System.Diagnostics.Process.Start(saveFileName); //打开EXCEL
            //MessageBox.Show("引出完毕!");
            SaveFileDialog saveFileDialog = new SaveFileDialog();
            saveFileDialog.Filter = "Execl文件(*.xls)|*.xls";
            saveFileDialog.FilterIndex = 0;
            saveFileDialog.RestoreDirectory = true;
            saveFileDialog.CreatePrompt = true;
            saveFileDialog.Title = "数据视图导出EXCEL文件";
            saveFileDialog.ShowDialog();
            if (saveFileDialog.FileName == "")
            {
                try
                {
                    workbook.Saved = true;
                    workbook.SaveCopyAs(saveFileName);
                    fileSaved = true;
                }
                catch (Exception ex)
                {
                    fileSaved = false;
                    MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message, "提示");
                }
                return;
            }
            else
            Stream myStream;
            myStream = saveFileDialog.OpenFile();
            StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding("gb2312"));
            string str = "";
            DateTime start = DateTime.Now;
            try
            {
                fileSaved = false;
                //写标题
                for (int i = 0; i < grdMain.ColumnCount; i++)
                {
                    if (i > 0)
                    {
                        str += "\t";
                    }
                    str += grdMain.Columns[i].HeaderText;
                }
                sw.WriteLine(str);
                //写内容
                for (int j = 0; j < grdMain.Rows.Count; j++)
                {
                    string tempStr = "";
                    for (int k = 0; k < grdMain.Columns.Count; k++)
                    {
                        if (k > 0)
                        {
                            tempStr += "\t";
                        }
                        if (grdMain.Rows[j].Cells[k].Value == null)
                        {
                            tempStr += string.Empty;
                        }
                        else
                        {
                            tempStr += grdMain.Rows[j].Cells[k].Value.ToString().Replace("\"", "”");
                        }
                    }
                    sw.WriteLine(tempStr);
                }
                sw.Close();
                myStream.Close();
            }
            xlApp.Quit();
            //
            IntPtr t = new IntPtr(xlApp.Hwnd); //得到这个句柄,具体作用是得到这块内存入口
            int k = 0;
            GetWindowThreadProcessId(t, out k); //得到本进程唯一标志k
            System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k); //得到对进程k的引用
            p.Kill(); //关闭进程k
            xlApp = null;
            //GC.Collect();//强行销毁
            //if (fileSaved && System.IO.File.Exists(saveFileName)) System.Diagnostics.Process.Start(saveFileName); //打开EXCEL
            MessageBox.Show("引出完毕!");
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                sw.Close();
                myStream.Close();
            }
            MessageBox.Show("将此工作表导出为excel共耗时:" + DateTime.Now.Subtract(start).TotalMilliseconds.ToString() + "毫秒");
        }
WorkM/±¨±í·ÖÎö/Sc_ICMOWorkCompleteSet.cs
@@ -334,8 +334,8 @@
        {
            if (tabControl1.SelectedIndex == 0)
            {
                //DBUtility.Gy_BaseFun.DataToExcel(this.Text, grdMain);
                DBUtility.Gy_BaseFun.DataGridViewToExcel2(grdMain);
                DBUtility.Gy_BaseFun.DataToExcel(this.Text, grdMain);
                //DBUtility.Gy_BaseFun.DataGridViewToExcel2(grdMain);
            }
            else
            {