C#操作EXCEL类

using System;
using Microsoft.Office.Interop.Excel;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using MySql.Data.Common;
using MySql.Data.MySqlClient;
using MySql.Data.Types;
using System.Data.Common;
 
    /// <summary>
    /// excel 2003 helper
    /// </summary>
    public sealed class ExcelHelper : IDisposable
    {
        public static readonly object Missing = Type.Missing;
        public string FileName { get; set; }
        public Application App { get; set; }
        public Workbooks Wbs { get; set; }
        public Workbook Wb { get; set; }
        public Worksheets Wss { get; set; }
        public Worksheet Ws { get; set; }
        public Range Rng { get; set; }
        //宋吉峰使用EXCEL变量定义开始
        public Microsoft.Office.Interop.Excel.Application excelApp = null;
        public Microsoft.Office.Interop.Excel.Workbook book = null;
        public Microsoft.Office.Interop.Excel.Worksheet sheet = null;
        public Microsoft.Office.Interop.Excel.Range range = null;
        public String Input_StrArr = "";
        //宋吉峰使用EXCEL变量定义结束

        public ExcelHelper()
        {
        }

        /// <summary>
        /// 创建一个Excel对象
        /// </summary>
        public void Create()
        {
            App = new Application() { Visible = false };
            Wbs = App.Workbooks;
            Wb = Wbs.Add(Missing);
        }

        /// <summary>
        /// //打开一个Excel文件
        /// </summary>
        /// <param name="fileName"></param>
        public void Open(string fileName)
        {
            App = new Application();
            Wbs = App.Workbooks;
            Wb = Wbs.Add(fileName);
            FileName = fileName;
        }

        /// <summary>
        /// 获取一个工作表
        /// </summary>
        /// <param name="sheetName"></param>
        /// <returns></returns>
        public Worksheet GetSheet(string sheetName)
        {
            return (Worksheet)Wb.Worksheets[sheetName];
        }

        public Worksheet GetSheet(int i)
        {
            return (Worksheet)Wb.Worksheets[i];
        }

        /// <summary>
        /// 添加一个工作表
        /// </summary>
        /// <param name="sheetName"></param>
        /// <returns></returns>
        public Worksheet AddSheet(string sheetName)
        {
            var s = (Worksheet)Wb.Worksheets.Add(Missing, Missing, Missing, Missing);
            s.Name = sheetName;
            return s;
        }

        /// <summary>
        /// 删除一个工作表
        /// </summary>
        /// <param name="sheetName"></param>
        public void DeleteSheet(string sheetName)
        {
            ((Worksheet)Wb.Worksheets[sheetName]).Delete();
        }

        /// <summary>
        /// 重命名一个工作表
        /// </summary>
        /// <param name="oldSheetName"></param>
        /// <param name="newSheetName"></param>
        /// <returns></returns>
        public Worksheet ReNameSheet(string oldSheetName, string newSheetName)
        {
            var s = (Worksheet)Wb.Worksheets[oldSheetName];
            s.Name = newSheetName;
            return s;
        }

        /// <summary>
        /// 重命名一个工作表
        /// </summary>
        /// <param name="sheet"></param>
        /// <param name="newSheetName"></param>
        /// <returns></returns>
        public Worksheet ReNameSheet(Worksheet sheet, string newSheetName)
        {
            sheet.Name = newSheetName;
            return sheet;
        }

        /// <summary>
        /// 设定单元格的值[Text]
        /// </summary>
        /// <param name="ws">要设值的工作表</param>
        /// <param name="x">X行</param>
        /// <param name="y">Y列</param>
        /// <param name="value">值</param>
        public Range SetCellValue(Worksheet ws, int x, int y, object value)
        {
            ((Range)ws.Cells[x, y]).Value2 = value;
            return (Range)ws.Cells[x, y];
        }

        /// <summary>
        /// 设定单元格的值[Text]
        /// </summary>
        /// <param name="sheetName">要设值的工作表的名称</param>
        /// <param name="x">X行</param>
        /// <param name="y">Y列</param>
        /// <param name="value">值</param>
        public Range SetCellValue(string sheetName, int x, int y, object value)
        {
            ((Range)GetSheet(sheetName).Cells[x, y]).Value2 = value;
            return (Range)GetSheet(sheetName).Cells[x, y];
        }

        /// <summary>
        /// 合并单元格
        /// </summary>
        /// <param name="ws"></param>
        /// <param name="x1"></param>
        /// <param name="y1"></param>
        /// <param name="x2"></param>
        /// <param name="y2"></param>
        public void MergeCells(Worksheet ws, int x1, int y1, int x2, int y2)
        {
            ws.get_Range(ws.Cells[x1, y1], ws.Cells[x2, y2]).Merge(Missing);
        }

        /// <summary>
        /// //合并单元格
        /// </summary>
        /// <param name="sheetName"></param>
        /// <param name="x1"></param>
        /// <param name="y1"></param>
        /// <param name="x2"></param>
        /// <param name="y2"></param>
        public void MergeCells(string sheetName, int x1, int y1, int x2, int y2)
        {
            GetSheet(sheetName).get_Range(GetSheet(sheetName).Cells[x1, y1], GetSheet(sheetName).Cells[x2, y2]).Merge(Missing);
        }

        /// <summary>
        /// 保存文档
        /// </summary>
        public void Save()
        {
            Wb.Save();
        }

        /// <summary>
        /// 文档另存为
        /// </summary>
        /// <param name="fileName"></param>
        public void SaveAs(string fileName)
        {
            Wb.SaveAs(fileName, XlFileFormat.xlWorkbookNormal,
                      Missing, Missing, Missing, Missing,
                      XlSaveAsAccessMode.xlNoChange,
                      Missing, Missing, Missing, Missing, Missing);
        }

        /// <summary>
        /// 关闭一个Excel对象,销毁对象
        /// </summary>
        public void Close()
        {
            // 明确的释放非托管的COM资源,调用Marshal.FinalReleaseComObject对所有的访问其对象.
            #region
            if (Rng != null)
            {
                System.Runtime.InteropServices.Marshal.FinalReleaseComObject(Rng);
                Rng = null;
            }

            if (Ws != null)
            {
                System.Runtime.InteropServices.Marshal.FinalReleaseComObject(Ws);
                Ws = null;
            }

            if (Wb != null)
            {
                if (App != null && App.DisplayAlerts)
                {
                    App.DisplayAlerts = false;
                }
                Wb.Close(Missing, Missing, Missing);
                System.Runtime.InteropServices.Marshal.FinalReleaseComObject(Wb);
                Wb = null;
            }

            if (Wbs != null)
            {
                if (App != null && App.DisplayAlerts)
                {
                    App.DisplayAlerts = false;
                }
                Wbs.Close();
                System.Runtime.InteropServices.Marshal.FinalReleaseComObject(Wbs);
                Wbs = null;
            }

            if (App != null)
            {
                if (App.DisplayAlerts)
                {
                    App.DisplayAlerts = false;
                }

                //当Excel或通过程序调用启动,并且Application.Visible = false时,Application.UserControl 的值是false。 
                //如果UserControl为false,且还有未完成的调用时,Excel进程将会继续保留。 
                //可以设置UserControl为true,强迫Quit方法调用时,应用程序被终止,而不管未完成的调用。 
                App.UserControl = true;
                App.Quit();

                System.Runtime.InteropServices.Marshal.FinalReleaseComObject(App);
                App = null;
            }
            #endregion

            #region GC
            // Clean up the unmanaged Excel COM resources by forcing a garbage
            // collection as soon as the calling function is off the stack (at
            // which point these objects are no longer rooted).
            GC.Collect();
            GC.WaitForPendingFinalizers();

            // GC needs to be called twice in order to get the Finalizers called
            // - the first time in, it simply makes a list of what is to be
            // finalized, the second time in, it actually is finalizing. Only
            // then will the object do its automatic ReleaseComObject.
            GC.Collect();
            GC.WaitForPendingFinalizers();
            #endregion

        }

        public void Dispose()
        {
            Close();
        }
        /*****************************************************************************************
         *
         * 宋吉峰添加EXCEL操作函数开始
         *
         * ***************************************************************************************/
        /// <summary>
        /// 将数据写入Excel
        /// </summary>
        /// <param name="data">要写入的字符串</param>
        /// <param name="starRow">写入的行</param>
        /// <param name="startColumn">写入的列</param>
        public void WriteData(string data, Int64 row, int column)
        { 
            sheet.Cells[row, column] = data;

        }
        /// 读取指定单元格数据
        /// </summary>
        /// <param name="row">行序号</param>
        /// <param name="column">列序号</param>
        /// <returns>该格的数据</returns>
        public string ReadData(Int64 row, int column)
        {
            Microsoft.Office.Interop.Excel.Range range = sheet.get_Range(sheet.Cells[row, column], sheet.Cells[row, column]);
            return range.Text.ToString();
        }
        /// <summary>
        /// 填充EXCEL内容函数
        /// </summary>
        /// <param name="fileName">EXCEL文件路径</param>
        /// <param name="str_Arr">填充内容以","(半角)为分割符号例如: 侧耳,水电厂,友,中小学,大</param>
        public String ExcelWriteData(string fileName, string str_Arr)
        {
            excelApp = new Microsoft.Office.Interop.Excel.Application();
            excelApp.Visible = false;   //若为true,删除瞬间可以看见 office excel界面
            //打开excel文件
            book = excelApp.Workbooks.Add(fileName);
            //获取sheet1
            sheet = (Microsoft.Office.Interop.Excel.Worksheet)book.Worksheets[1];
            //获取编辑范围
            // str = ReadData(3, 4);// sheet.Cells[3, 4].ToString();
            string[] Str_Arr;

            if (str_Arr.Length > 0)
            {
                Str_Arr = str_Arr.Split(',');
            }
            else
            {
                Str_Arr = Input_StrArr.Split(',');
            }
            //"第一个填充" //产品品番
            if (Str_Arr.Length > 0)
            {
                WriteData(Str_Arr[0], 4, 3);
            }
            else
            {
                WriteData("", 4, 3);
            }
            //"第2个填充" //产品品名
            if (Str_Arr.Length > 1)
            {
                WriteData(Str_Arr[1], 6, 3);
            }
            else
            {
                WriteData("", 6, 3);
            }
            //"第3个填充" //式样规格
            if (Str_Arr.Length > 2)
            {
                WriteData(Str_Arr[2], 8, 3);
            }
            else
            {
                WriteData("", 8, 3);
            }
            //"第4个填充"  //投入数量
            if (Str_Arr.Length > 3)
            {
                WriteData(Str_Arr[3], 11, 5);
            }
            else
            {
                WriteData("", 11, 5);
            }
            //"第5个填充" //批量号
            if (Str_Arr.Length > 4)
            {
                WriteData(Str_Arr[4], 4, 12);
            }
            else
            {
                WriteData("", 4, 12);
            }
            //"第6个填充" //原始批量号
            if (Str_Arr.Length > 6)
            {
                WriteData(Str_Arr[6], 6, 12);
            }
            else
            {
                WriteData("", 6, 12);
            }
            ////"第7个填充" //作业手顺
            //if (Str_Arr.Length > 6)
            //{
            //    WriteData(Str_Arr[6], 8, 12);
            //}
            //获取sheet2
            sheet = (Microsoft.Office.Interop.Excel.Worksheet)book.Worksheets[2];
            //获取编辑范围
            // str = ReadData(3, 4);// sheet.Cells[3, 4].ToString();

            //"第一个填充" //产品品番
            if (Str_Arr.Length > 0)
            {
                WriteData(Str_Arr[0], 4, 3);
            }
            else
            {
                WriteData("", 4, 3);
            }
            //"第2个填充" //产品品名
            if (Str_Arr.Length > 1)
            {
                WriteData(Str_Arr[1], 6, 3);
            }
            else
            {
                WriteData("", 6, 3);
            }
            //"第3个填充" //式样规格
            if (Str_Arr.Length > 2)
            {
                WriteData(Str_Arr[2], 8, 3);
            }
            else
            {
                WriteData("", 8, 3);
            }
            //"第4个填充"  //投入数量
            if (Str_Arr.Length > 3)
            {
                WriteData(Str_Arr[3], 11, 5);
            }
            else
            {
                WriteData("", 11, 5);
            }
            //"第5个填充" //批量号
            if (Str_Arr.Length > 4)
            {
                WriteData(Str_Arr[4], 4, 12);
            }
            else
            {
                WriteData("", 4, 12);
            }
            //"第6个填充" //原始批量号
            if (Str_Arr.Length > 5)
            {
                WriteData(Str_Arr[5], 6, 12);
            }
            else
            {
                WriteData("", 6, 12);
            }
            //"第7个填充" //作业手顺
            if (Str_Arr.Length > 6)
            {
                WriteData(Str_Arr[6], 8, 12);
            }
            else
            {
                WriteData("", 8, 12);
            }
            string str = "";
            string s = System.DateTime.Now.Date.Year.ToString() + "-" + System.DateTime.Now.Date.Month.ToString() + "-" + System.DateTime.Now.Date.Day.ToString() + "-" + System.DateTime.Now.Date.Hour.ToString() + "-" + System.DateTime.Now.Date.Minute.ToString() + "-" + System.DateTime.Now.Second.ToString() + "-" + System.DateTime.Now.Millisecond.ToString();
            s = s + ".xls";
            str = fileName.ToString().ToLower().Replace(".xls", s);
            //保存编辑
            // SaveAs();
            book.SaveAs(str, XlFileFormat.xlWorkbookNormal,
                      Missing, Missing, Missing, Missing,
                      XlSaveAsAccessMode.xlNoChange,
                      Missing, Missing, Missing, Missing, Missing);
            //关闭book
            book.Close(Missing, Missing, Missing);
            //退出excel application,可以将前面的excelApp.Visible = false改为excelApp.Visible = true看看;
            excelApp.Workbooks.Close();
            excelApp.Quit();
            return str;
        }
        public void ExcelWritePrintData(string fileName, string str_Arr)
        {
            excelApp = new Microsoft.Office.Interop.Excel.Application();
            excelApp.Visible = false;   //若为true,删除瞬间可以看见 office excel界面
            //打开excel文件
            book = excelApp.Workbooks.Add(fileName);
            //获取sheet1
            sheet = (Microsoft.Office.Interop.Excel.Worksheet)book.Worksheets[1];
            //获取编辑范围
            // str = ReadData(3, 4);// sheet.Cells[3, 4].ToString();
            string[] Str_Arr;

            if (str_Arr.Length > 0)
            {
                Str_Arr = str_Arr.Split(',');
            }
            else
            {
                Str_Arr = Input_StrArr.Split(',');
            }
            //"第一个填充" //产品品番
            if (Str_Arr.Length > 0)
            {
                WriteData(Str_Arr[0], 4, 3);
            }
            else
            {
                WriteData("", 4, 3);
            }
            //"第2个填充" //产品品名
            if (Str_Arr.Length > 1)
            {
                WriteData(Str_Arr[1], 6, 3);
            }
            else
            {
                WriteData("", 6, 3);
            }
            //"第3个填充" //式样规格
            if (Str_Arr.Length > 2)
            {
                WriteData(Str_Arr[2], 8, 3);
            }
            else
            {
                WriteData("", 8, 3);
            }
            //"第4个填充"  //投入数量
            if (Str_Arr.Length > 3)
            {
                WriteData(Str_Arr[3], 11, 5);
            }
            else
            {
                WriteData("", 11, 5);
            }
            //"第5个填充" //批量号
            if (Str_Arr.Length > 4)
            {
                WriteData(Str_Arr[4], 4, 12);
            }
            else
            {
                WriteData("", 4, 12);
            }
            //"第6个填充" //原始批量号
            if (Str_Arr.Length > 6)
            {
                WriteData(Str_Arr[6], 6, 12);
            }
            else
            {
                WriteData("", 6, 12);
            }
            ////"第7个填充" //作业手顺
            //if (Str_Arr.Length > 6)
            //{
            //    WriteData(Str_Arr[6], 8, 12);
            //}
            //获取sheet2
            //sheet = (Microsoft.Office.Interop.Excel.Worksheet)book.Worksheets[2];
            ////获取编辑范围
            //// str = ReadData(3, 4);// sheet.Cells[3, 4].ToString();

            ////"第一个填充" //产品品番
            //if (Str_Arr.Length > 0)
            //{
            //    WriteData(Str_Arr[0], 4, 3);
            //}
            //else
            //{
            //    WriteData("", 4, 3);
            //}
            ////"第2个填充" //产品品名
            //if (Str_Arr.Length > 1)
            //{
            //    WriteData(Str_Arr[1], 6, 3);
            //}
            //else
            //{
            //    WriteData("", 6, 3);
            //}
            ////"第3个填充" //式样规格
            //if (Str_Arr.Length > 2)
            //{
            //    WriteData(Str_Arr[2], 8, 3);
            //}
            //else
            //{
            //    WriteData("", 8, 3);
            //}
            ////"第4个填充"  //投入数量
            //if (Str_Arr.Length > 3)
            //{
            //    WriteData(Str_Arr[3], 11, 5);
            //}
            //else
            //{
            //    WriteData("", 11, 5);
            //}
            ////"第5个填充" //批量号
            //if (Str_Arr.Length > 4)
            //{
            //    WriteData(Str_Arr[4], 4, 12);
            //}
            //else
            //{
            //    WriteData("", 4, 12);
            //}
            ////"第6个填充" //原始批量号
            //if (Str_Arr.Length > 5)
            //{
            //    WriteData(Str_Arr[5], 6, 12);
            //}
            //else
            //{
            //    WriteData("", 6, 12);
            //}
            ////"第7个填充" //作业手顺
            //if (Str_Arr.Length > 6)
            //{
            //    WriteData(Str_Arr[6], 8, 12);
            //}
            //else
            //{
            //    WriteData("", 8, 12);
            //}
            string str = "";
            string s = System.DateTime.Now.Date.Year.ToString() + "-" + System.DateTime.Now.Date.Month.ToString() + "-" + System.DateTime.Now.Date.Day.ToString() + "-" + System.DateTime.Now.Date.Hour.ToString() + "-" + System.DateTime.Now.Date.Minute.ToString() + "-" + System.DateTime.Now.Second.ToString() + "-" + System.DateTime.Now.Millisecond.ToString();
            s = s + ".xls";
            str = fileName.ToString().ToLower().Replace(".xls", s);
            //保存编辑
            // SaveAs();
            book.SaveAs(str, XlFileFormat.xlWorkbookNormal,
                      Missing, Missing, Missing, Missing,
                      XlSaveAsAccessMode.xlNoChange,
                      Missing, Missing, Missing, Missing, Missing);
            //关闭book
            book.Close(Missing, Missing, Missing);
            //退出excel application,可以将前面的excelApp.Visible = false改为excelApp.Visible = true看看;
            excelApp.Workbooks.Close();
            excelApp.Quit();
            ExcelPrint(str);
        }
        /// <summary>
        /// 通过文件路径和XLS文件中SHEET的索引来打印EXCEL的SHEET文档
        /// </summary>
        /// <param name="strFilePath">XLS文件路径</param>
        /// <param name="SheetIndex">XLS文件中SHEET的索引</param>
        public void ExcelPrint(string strFilePath, int SheetIndex)
        {
            Microsoft.Office.Interop.Excel.ApplicationClass xlApp = new ApplicationClass();
            Microsoft.Office.Interop.Excel.Workbooks xlWorkbooks;
            Microsoft.Office.Interop.Excel.Workbook xlWorkbook;
            Microsoft.Office.Interop.Excel.Worksheet xlWorksheet;
            System.Type tyWorkbooks;
            System.Reflection.MethodInfo[] methods;
            object objFilePath;

            object oMissing = System.Reflection.Missing.Value;
            //strFilePath = Server.MapPath(strFilePath);
            if (!System.IO.File.Exists(strFilePath))
            {
                throw new System.IO.FileNotFoundException();
                return;
            }
            try
            {
                xlApp.Visible = true;
                xlWorkbooks = xlApp.Workbooks;
                tyWorkbooks = xlWorkbooks.GetType();
                methods = tyWorkbooks.GetMethods();
                objFilePath = strFilePath;
                object Nothing = System.Reflection.Missing.Value;
                xlWorkbook = xlApp.Workbooks.Open(strFilePath, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing);
                xlWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkbook.Worksheets[SheetIndex];

                xlWorksheet.PrintPreview(true);
                xlWorkbook.Close(oMissing, oMissing, oMissing);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (xlApp != null)
                {
                    xlApp.Quit();
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
                    xlApp = null;
                }
                GC.Collect();
            }
        }
        /// <summary>
        /// 打印EXCEL中所有SHEET
        /// </summary>
        /// <param name="strFilePath">EXCEL文件路径</param>
        public void ExcelPrint(string strFilePath)
        {
            int SheetIndex;
            SheetIndex = 1;
            Microsoft.Office.Interop.Excel.ApplicationClass xlApp = new ApplicationClass();
            Microsoft.Office.Interop.Excel.Workbooks xlWorkbooks;
            Microsoft.Office.Interop.Excel.Workbook xlWorkbook;
            Microsoft.Office.Interop.Excel.Worksheet xlWorksheet;
            System.Type tyWorkbooks;
            System.Reflection.MethodInfo[] methods;
            object objFilePath;

            object oMissing = System.Reflection.Missing.Value;
            //strFilePath = Server.MapPath(strFilePath);
            if (!System.IO.File.Exists(strFilePath))
            {
                throw new System.IO.FileNotFoundException();
                return;
            }
            try
            {
                xlApp.Visible = true;
                xlWorkbooks = xlApp.Workbooks;
                tyWorkbooks = xlWorkbooks.GetType();
                methods = tyWorkbooks.GetMethods();
                objFilePath = strFilePath;
                object Nothing = System.Reflection.Missing.Value;
                xlWorkbook = xlApp.Workbooks.Open(strFilePath, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing);

                for (SheetIndex = 0; SheetIndex < xlWorkbook.Sheets.Count; SheetIndex++)
                {
                    xlWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkbook.Worksheets[SheetIndex + 1];

                    xlWorksheet.PrintPreview(true);
                }
                xlWorkbook.Close(oMissing, oMissing, oMissing);

            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (xlApp != null)
                {
                    xlApp.Quit();
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
                    xlApp = null;
                }
                GC.Collect();
            }
        }
        public void ExcelPrint_pdf(string strFilePath)
        {
            int SheetIndex;
            SheetIndex = 1;
            Microsoft.Office.Interop.Excel.ApplicationClass xlApp = new ApplicationClass();
            Microsoft.Office.Interop.Excel.Workbooks xlWorkbooks;
            Microsoft.Office.Interop.Excel.Workbook xlWorkbook;
            Microsoft.Office.Interop.Excel.Worksheet xlWorksheet;
            System.Type tyWorkbooks;
            System.Reflection.MethodInfo[] methods;
            object objFilePath;

            object oMissing = System.Reflection.Missing.Value;
            //strFilePath = Server.MapPath(strFilePath);
            if (!System.IO.File.Exists(strFilePath))
            {
                throw new System.IO.FileNotFoundException();
                return;
            }
            try
            {
                xlApp.Visible = true;
                xlWorkbooks = xlApp.Workbooks;
                tyWorkbooks = xlWorkbooks.GetType();
                methods = tyWorkbooks.GetMethods();
                objFilePath = strFilePath;
                object Nothing = System.Reflection.Missing.Value;
                xlWorkbook = xlApp.Workbooks.Open(strFilePath, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing);

                for (SheetIndex = 0; SheetIndex < xlWorkbook.Sheets.Count; SheetIndex++)
                {
                    xlWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkbook.Worksheets[SheetIndex + 1];
                    xlWorksheet.PrintOut(1, 1, false, false, "Acrobat Distiller", true, false, strFilePath.ToString().ToLower().Replace(".xls",(SheetIndex.ToString()+".pdf")));
                    //xlWorksheet.PrintPreview(true);
                }
                xlWorkbook.Close(oMissing, oMissing, oMissing);

            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (xlApp != null)
                {
                    xlApp.Quit();
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
                    xlApp = null;
                }
                GC.Collect();
            }
        }
        /*****************************************************************************************
        *
        * 宋吉峰添加EXCEL操作函数结束
        *
        * ***************************************************************************************/

        public String ExcelWriteData_C(string fileName)
        {
            string ColumsIndex = "";
            string RowIndex = "";
            String letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            excelApp = new Microsoft.Office.Interop.Excel.Application();
            excelApp.Visible = false;   //若为true,删除瞬间可以看见 office excel界面
            //打开excel文件
            book = excelApp.Workbooks.Add(fileName);
            //获取sheet1
            sheet = (Microsoft.Office.Interop.Excel.Worksheet)book.Worksheets[1];
            //获取编辑范围
            // str = ReadData(3, 4);// sheet.Cells[3, 4].ToString();
            string str = "SELECT  TABLE_SCHEMA,COLUMN_NAME,concat(TABLE_NAME,'.',COLUMN_NAME) as columnss  FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE  where TABLE_SCHEMA='mts2' and column_name<>'CO_CODE'";
            System.Data.DataTable dt = new System.Data.DataTable();
            MYSQL_SQLDB SQLDB = new MYSQL_SQLDB();
            Int64 bigno = 0;
            WriteData("数据库名:MTS2", 1, 1);
            range = (Range)sheet.get_Range("A1", "A1");
            range.Cells.Interior.Color = System.Drawing.Color.FromArgb(0,255,255).ToArgb();
            bigno = 1;
            //数据填充开始
            str = "show tables";
            dt = SQLDB.Get_DataTable_By_ExecuteSQL(str);
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                bigno = bigno + 3;
                WriteData("表名:",bigno, 1);
                WriteData(dt.Rows[i][0].ToString(), bigno, 2);
                ColumsIndex = "B" + bigno.ToString();
                range = (Range)sheet.get_Range(ColumsIndex, ColumsIndex);
                range.Cells.Interior.Color = System.Drawing.Color.FromArgb(0, 255, 255).ToArgb();
                System.Data.DataTable dt_Keywords = new System.Data.DataTable();
                str = "SELECT  TABLE_SCHEMA,COLUMN_NAME,concat(TABLE_NAME,'.',COLUMN_NAME) as columnss  FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE  where TABLE_SCHEMA='mts2' and column_name<>'CO_CODE' and TABLE_NAME='" + dt.Rows[i][0].ToString() + "'";
                dt_Keywords = SQLDB.Get_DataTable_By_ExecuteSQL(str);
               // Response.Write("<BR>**************************************************************************************<BR>");
               // Response.Write("<BR>表KeyWords名称:<BR>");
               // Response.Write("<BR>**************************************************************************************<BR>");
                bigno=bigno+2;
                WriteData("关键字:", bigno, 1);
                ColumsIndex = "B" + bigno.ToString();
                range = (Range)sheet.get_Range(ColumsIndex, ColumsIndex);
                range.Cells.Interior.Color = System.Drawing.Color.FromArgb(0, 255, 255).ToArgb();
              
                for (int j = 0; j < dt_Keywords.Rows.Count; j++)
                {
                   // Response.Write("<BR>KeyWords  Name:<BR>" + dt_Keywords.Rows[j]["COLUMN_NAME"].ToString());
                    bigno = bigno + 1;
                    WriteData(dt_Keywords.Rows[j]["COLUMN_NAME"].ToString(), bigno, 2);
                    ColumsIndex = "B"+bigno.ToString();
                    range.WrapText = true;
                    range = (Range)sheet.get_Range(ColumsIndex, ColumsIndex);
                    //range.Cells.Interior.Color = System.Drawing.Color.FromArgb(255, 0, 0).ToArgb();
                    range.Font.Color = System.Drawing.Color.FromArgb(255, 0, 0).ToArgb();
                    System.Data.DataTable dt_Table_Related = new System.Data.DataTable();
                    str = "SELECT  TABLE_SCHEMA,COLUMN_NAME, TABLE_NAME   FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE  where TABLE_SCHEMA='mts2' and column_name<>'CO_CODE' and column_name='" + dt_Keywords.Rows[j]["COLUMN_NAME"].ToString() + "'";
                     dt_Table_Related.Clear();
                    dt_Table_Related = SQLDB.Get_DataTable_By_ExecuteSQL(str);
                    //Response.Write("<BR>Related_Table:");
                 
                    bigno = bigno + 1;
                    WriteData("相关表名:", bigno, 2);
                    ColumsIndex = "B" + bigno.ToString();
                    range = (Range)sheet.get_Range(ColumsIndex, ColumsIndex);
                    range.Cells.Interior.Color = System.Drawing.Color.FromArgb(255, 0, 255).ToArgb();
                    range.WrapText = true;
                    //range.Cells.Interior.Color = System.Drawing.Color.FromArgb(255, 0, 0).ToArgb();
                    range.Font.Color = System.Drawing.Color.FromArgb(255, 0, 0).ToArgb();
                    WriteData("链接条件:", bigno+1, 2);
                    ColumsIndex = "B" + (bigno+1).ToString();
                    range = (Range)sheet.get_Range(ColumsIndex, ColumsIndex);
                    range.WrapText = true;
                    range.Cells.Interior.Color = System.Drawing.Color.FromArgb(255,0,  255).ToArgb();
                    //range.Cells.Interior.Color = System.Drawing.Color.FromArgb(255, 0, 0).ToArgb();
                    range.Font.Color = System.Drawing.Color.FromArgb(255, 0, 0).ToArgb();
                  
               int k = 0;
                    for ( k = 0; k < dt_Table_Related.Rows.Count; k++)
                    {
                        WriteData(dt_Table_Related.Rows[k]["table_name"].ToString(), bigno, 3 + k);
                        ColumsIndex = letter.Substring(3 + k, 1) + (bigno ).ToString();
                        range = (Range)sheet.get_Range(ColumsIndex, ColumsIndex);
                        range.WrapText = true;
                        range.Cells.Interior.Color = System.Drawing.Color.FromArgb(255, 0, 255).ToArgb();
                        range.Font.Color = System.Drawing.Color.FromArgb(255, 0, 0).ToArgb();

                        range.BorderAround(XlLineStyle.xlContinuous, XlBorderWeight.xlThick, XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());

                        string ss =dt.Rows[i][0].ToString()+"."+dt_Keywords.Rows[j]["COLUMN_NAME"].ToString()+"="+dt_Table_Related.Rows[k]["table_name"].ToString() + "." + dt_Table_Related.Rows[k]["COLUMN_NAME"].ToString();
                        WriteData(ss, bigno + 1, 3 + k);
                        ColumsIndex = letter.Substring(3+k,1) + (bigno + 1).ToString();
                        range = (Range)sheet.get_Range(ColumsIndex, ColumsIndex);
                        range.WrapText = true;
                        range.Cells.Interior.Color = System.Drawing.Color.FromArgb(255, 0, 255).ToArgb();
                        range.Font.Color = System.Drawing.Color.FromArgb(255,0, 0 ).ToArgb();
                        range.BorderAround(XlLineStyle.xlContinuous, XlBorderWeight.xlThick, XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());
                        // Response.Write(dt_Table_Related.Rows[k]["table_name"].ToString() + ",");
                    }
                    if (k == 0)
                    {
                        WriteData("无关键字", bigno, 3);
                    }
                    else
                    {
                        bigno = bigno + 1;
                    }
                }
               // Response.Write("<BR>**************************************************************************************<BR>");
                System.Data.DataTable dt_Table_colunms_name = new System.Data.DataTable();
                str = "show columns from " + dt.Rows[i][0].ToString() + "  from MTS2 ";
                dt_Table_colunms_name.Clear();
                dt_Table_colunms_name = SQLDB.Get_DataTable_By_ExecuteSQL(str);
                bigno = bigno + 2;
                WriteData("字段名称", bigno, 1);
                ColumsIndex = "A" + bigno.ToString();
                range = (Range)sheet.get_Range(ColumsIndex, ColumsIndex);
                range.Cells.Interior.Color = System.Drawing.Color.FromArgb(255, 255, 0).ToArgb();
        
                WriteData("字段类型", bigno, 2);
                ColumsIndex = "B" + bigno.ToString();
                range = (Range)sheet.get_Range(ColumsIndex, ColumsIndex);
                range.Cells.Interior.Color = System.Drawing.Color.FromArgb(255, 255, 0).ToArgb();
                WriteData("是否可为空", bigno, 3);
                ColumsIndex = "C" + bigno.ToString();
                range = (Range)sheet.get_Range(ColumsIndex, ColumsIndex);
                range.Cells.Interior.Color = System.Drawing.Color.FromArgb(255, 255, 0).ToArgb();
                WriteData("是否为关键值", bigno, 4);
                ColumsIndex = "D" + bigno.ToString();
                range = (Range)sheet.get_Range(ColumsIndex, ColumsIndex);
                range.Cells.Interior.Color = System.Drawing.Color.FromArgb(255, 255, 0).ToArgb();
                WriteData("默认值", bigno, 5);
                ColumsIndex = "E" + bigno.ToString();
                range = (Range)sheet.get_Range(ColumsIndex, ColumsIndex);
                range.Cells.Interior.Color = System.Drawing.Color.FromArgb(255, 255, 0).ToArgb();
                for (int y = 0; y < dt_Table_colunms_name.Rows.Count; y++)
                {
                    bigno = bigno + 1;

                    WriteData(dt_Table_colunms_name.Rows[y]["Field"].ToString(), bigno, 1);
                    WriteData(dt_Table_colunms_name.Rows[y]["type"].ToString(), bigno, 2);
                    WriteData(dt_Table_colunms_name.Rows[y]["NULL"].ToString(), bigno, 3);
                    WriteData(dt_Table_colunms_name.Rows[y]["Key"].ToString(), bigno, 4);
                    WriteData(dt_Table_colunms_name.Rows[y]["Default"].ToString(), bigno, 5);
                   // Response.Write("<BR>" + dt_Table_colunms_name.Rows[y]["Field"].ToString());
                }

            }
            //数据填充结束
              
           
            
            string s = System.DateTime.Now.Date.Year.ToString() + "-" + System.DateTime.Now.Date.Month.ToString() + "-" + System.DateTime.Now.Date.Day.ToString() + "-" + System.DateTime.Now.Date.Hour.ToString() + "-" + System.DateTime.Now.Date.Minute.ToString() + "-" + System.DateTime.Now.Second.ToString() + "-" + System.DateTime.Now.Millisecond.ToString();
            s = s + ".xls";
            str = fileName.ToString().ToLower().Replace(".xls", s);
            //保存编辑
            // SaveAs();
            book.SaveAs(str, XlFileFormat.xlWorkbookNormal,
                      Missing, Missing, Missing, Missing,
                      XlSaveAsAccessMode.xlNoChange,
                      Missing, Missing, Missing, Missing, Missing);
            //关闭book
            book.Close(Missing, Missing, Missing);
            //退出excel application,可以将前面的excelApp.Visible = false改为excelApp.Visible = true看看;
            excelApp.Workbooks.Close();
            excelApp.Quit();
            return str;
        }
    }
 

posted @ 2012-08-15 16:09  greefsong  阅读(326)  评论(0编辑  收藏  举报