using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Text; using System.Windows.Forms; using System.Reflection; using System.Runtime.InteropServices; //调用API namespace SuperTools { #region (动态类)嵌入excel.exe应用程序到c#(V2.0)的WinForm里面 /// /// 嵌入excel.exe应用程序到c#(V2.0)的WinForm里面 /// 作者:yuanshou.如有问题,请联系:yuanshou@21cn.com /// public partial class UC_EmbedExcelIntoWinFormNoDLL : UserControl { #region 控件本身生成 /// /// 必需的设计器变量。 /// private System.ComponentModel.IContainer components = null; /// /// 清理所有正在使用的资源。 /// /// 如果应释放托管资源,为 true;否则为 false。 protected override void Dispose(bool disposing) { AppExcel_Exit();   //调用退出 //******************************* //C:\Documents and Settings\Administrator\Application Data\Microsoft\Excel\Excel11.xlb string LoginName = System.Environment.UserName; //计算机名字 string strExcelStyleFileName = "C:\\Documents and Settings\\" + LoginName + "\\Application Data\\Microsoft\\Excel\\Excel11.xlb"; if (System.IO.File.Exists(strExcelStyleFileName) == true) { System.IO.File.Delete(strExcelStyleFileName); } //******************** if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region 组件设计器生成的代码 /// /// 设计器支持所需的方法 - 不要 /// 使用代码编辑器修改此方法的内容。 /// private void InitializeComponent() { this.SuspendLayout(); // // UC_EmbedExcelIntoWinFormNoDLL // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Name = "UC_EmbedExcelIntoWinFormNoDLL"; this.Size = new System.Drawing.Size(149, 132); this.Load += new System.EventHandler(this.UC_EmbedExcelIntoWinFormNoDLL_Load); this.SizeChanged += new System.EventHandler(this.UC_EmbedExcelIntoWinFormNoDLL_SizeChanged); this.ResumeLayout(false); } #endregion #endregion private IntPtr appSubWinHandle = IntPtr.Zero; //打开excel.exe窗体的句柄 /// /// 构造函数 /// public UC_EmbedExcelIntoWinFormNoDLL() { InitializeComponent(); } private void UC_EmbedExcelIntoWinFormNoDLL_Load(object sender, EventArgs e) { } private void UC_EmbedExcelIntoWinFormNoDLL_SizeChanged(object sender, EventArgs e) { ReDraw(); } #region 操作 excel private object m_objApp; private object m_objBooks; private object m_objBook; private object m_objSheets; private object m_objSheet; private DateTime LateBindingExcelStartTime;   //AppExcel 窗口启动时间 private DateTime LateBindingExcelEndTime;   //AppExcel 窗口打开完毕后的时间 /// /// 文件打开 /// /// 打开的文件名字,默认打开激活的sheet1 /// 是否显示excel.exe应用程序的界面 /// public void AppExcel_Open(string _ExcelFileName, bool _bEmbedExcelIntoWinForm) { AppExcel_Open(_ExcelFileName, 1, _bEmbedExcelIntoWinForm); } /// /// 文件打开 /// /// 打开的文件名字 /// 选择激活的sheet序号,从1开始 /// 是否显示excel.exe应用程序的界面 /// public bool AppExcel_Open(string _ExcelOpenFileName, int _ActivatorSheet, bool _bEmbedExcelIntoWinForm) { //if (_FileName == null) { return false; } if (m_objApp != null & m_objBook != null) { this.AppExcel_Exit(); } #region 实例化m_objApp,并打开m_objApp LateBindingExcelStartTime = System.DateTime.Now; //开始时间 this.m_objApp = this.Get_App(); //获取Excel类型并建立其实例 this.m_objBooks = this.Get_Books(this.m_objApp); //获取Workbook集 this.m_objBook = this.Get_Book(this.m_objBooks, _ExcelOpenFileName); this.m_objSheets = this.Get_Sheets(this.m_objBook); //获取Sheet集 this.m_objSheet = this.Get_Sheet(this.m_objSheets, _ActivatorSheet); //获取一个Sheet对象 LateBindingExcelEndTime = System.DateTime.Now; //结束时间 #endregion #region 获取句柄,并嵌入窗体 if (_bEmbedExcelIntoWinForm) { this.SetApp_Visible(this.m_objApp, _bEmbedExcelIntoWinForm); //显示excel程序的界面,只有显示,才能获取句柄 //this.SetApp_ExcelWindowState(2); // excel.exe程序可见后,最小化窗口 this.appSubWinHandle = GetExcelProcessHandle(this.LateBindingExcelStartTime, this.LateBindingExcelEndTime); #region 嵌入窗体 if (this.appSubWinHandle != IntPtr.Zero) //打开Excel窗口,并嵌入到WinForm中 { this.EmbedIntoWindows(); //this.SetApp_ExcelWindowState(1); //嵌入完后,显示 EXCEL.EXE的窗口正常显示 this.SetApp_EmbedExcelStyle(); //设置嵌入excel的显示式样:隐藏系统菜单和命令快捷键 return true; } else { MessageBox.Show("不能获取WinHandle,请关闭重新打开!"); return false; } #endregion } else { return false; } #endregion } #region late Bing 的方法 设置说明 //为了获取返回值,必须指定 BindingFlags.Instance 或 BindingFlags.Static。 //可以使用下列 BindingFlags 调用标志表示要对成员采取的操作: //CreateInstance,表示调用构造函数。忽略 name。对其他调用标志无效。 //InvokeMethod,表示调用方法,而不调用构造函数或类型初始值设定项。对 SetField 或 SetProperty 无效。 //GetField,表示获取字段值。对 SetField 无效。 //SetField,表示设置字段值。对 GetField 无效。 //GetProperty,表示获取属性。对 SetProperty 无效。 //SetProperty 表示设置属性。对 GetProperty 无效。 //BindingFlags,枚举类型 如下: //BindingFlags.Instance : 对象实例 //BindingFlags.Static : 静态成员 //BindingFlags.Public : 指可在搜索中包含公共成员 //BindingFlags.NonPublic : 指可在搜索中包含非公共成员(即私有成员和受保护的成员) //BindingFlags.FlattenHierarchy : 指可包含层次结构上的静态成员 //BindingFlags.IgnoreCase : 表示忽略 name 的大小写 //BindingFlags.DeclaredOnly : 仅搜索 Type 上声明的成员,而不搜索被简单继承的成员 //BindingFlags.CreateInstance : 表示调用构造函数。忽略 name。对其他调用标志无效 //举例: //对执行方法的,用 BindingFlags.InvokeMethod 如 sheet.Activate(),book.close(); //对获取/设置属性的用GetProperty/SetProperty //BindingFlags SetPropFlags = BindingFlags.SetProperty | BindingFlags.Static | BindingFlags.Public | // BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy | BindingFlags.IgnoreCase | BindingFlags.CreateInstance; #endregion #region 获取Excel类型并建立其实例 /// /// 获取Excel类型并建立其实例 /// /// Excel实例 private object Get_App() { Type objExcelType = Type.GetTypeFromProgID("Excel.Application"); //Excel.Application //Word.Application //PowerPoint.Application //Outlook.Application if (objExcelType == null) { string strErr = "本计算机无Excel.Application"; System.Windows.Forms.MessageBox.Show(strErr); return null; } //新建一个Excel.exe的进程 object _objApp = Activator.CreateInstance(objExcelType); if (_objApp == null) { string strErr = "本计算机的Excel.Application无法正常使用!"; System.Windows.Forms.MessageBox.Show(strErr); return null; } else { return _objApp; } } /// /// 获取Workbook集 /// /// /// private object Get_Books(object _objApp) { if (_objApp == null) { return null; } object m_objBooks = _objApp.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, _objApp, null); return m_objBooks; } /// /// 添加一个新的Workbook 或者 打开一个已经存在的Workbook /// /// /// 打开的文件名,如果为null,则新打开 /// private object Get_Book(object _objBooks, string _strFileName) { if (_objBooks == null) { return null; } object m_objBook = new object(); if (_strFileName == null) { //添加一个新的Workbook m_objBook = _objBooks.GetType().InvokeMember("Add", BindingFlags.InvokeMethod, null, _objBooks, null); } else { //打开一个已经存在的Workbook #region 打开参数 object o_Filename = _strFileName; // "123"; object o_UpdateLinks = System.Reflection.Missing.Value; object o_ReadOnly = System.Reflection.Missing.Value; object o_Format = System.Reflection.Missing.Value; object o_Password = System.Reflection.Missing.Value; object o_WriteResPassword = System.Reflection.Missing.Value; object o_IgnoreReadOnlyRecommended = System.Reflection.Missing.Value; object o_Origin = System.Reflection.Missing.Value; object o_Delimiter = System.Reflection.Missing.Value; object o_Editable = System.Reflection.Missing.Value; object o_Notify = System.Reflection.Missing.Value; object o_Converter = System.Reflection.Missing.Value; object o_AddToMru = System.Reflection.Missing.Value; object o_Local = System.Reflection.Missing.Value; object o_CorruptLoad = System.Reflection.Missing.Value; object[] m_Parameters_objBooksOpen = new Object[15]; m_Parameters_objBooksOpen[0] = o_Filename; m_Parameters_objBooksOpen[1] = o_UpdateLinks; m_Parameters_objBooksOpen[2] = o_ReadOnly; m_Parameters_objBooksOpen[3] = o_Format; m_Parameters_objBooksOpen[4] = o_Password; m_Parameters_objBooksOpen[5] = o_WriteResPassword; m_Parameters_objBooksOpen[6] = o_IgnoreReadOnlyRecommended; m_Parameters_objBooksOpen[7] = o_Origin; m_Parameters_objBooksOpen[8] = o_Delimiter; m_Parameters_objBooksOpen[9] = o_Editable; m_Parameters_objBooksOpen[10] = o_Notify; m_Parameters_objBooksOpen[11] = o_Converter; m_Parameters_objBooksOpen[12] = o_AddToMru; m_Parameters_objBooksOpen[13] = o_Local; m_Parameters_objBooksOpen[14] = o_CorruptLoad; #endregion m_objBook = _objBooks.GetType().InvokeMember("Open", BindingFlags.InvokeMethod, null, _objBooks, m_Parameters_objBooksOpen); } return m_objBook; } /// /// 获取Sheet集 /// /// /// private object Get_Sheets(object _objBook) { if (_objBook == null) { return null; } object m_objSheets = _objBook.GetType().InvokeMember("Worksheets", BindingFlags.GetProperty, null, _objBook, null); return m_objSheets; } /// /// 获取其中一个Sheet /// /// /// /// private object Get_Sheet(object _objSheets, int _ActivatorSheet) { if (_objSheets == null) { return null; } //object[] m_Parameters_ActivatorSheet = new Object[1] { 1 }; //第一个sheet:sheet1 object[] m_Parameters_ActivatorSheet = new Object[1] { _ActivatorSheet }; //第一个sheet:sheet1 object m_objSheet = _objSheets.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, _objSheets, m_Parameters_ActivatorSheet); this.SetSheet_ChangeActivateSheet(_ActivatorSheet); return m_objSheet; } #endregion //得到Excel进程ID的MainWindowHandle private static IntPtr GetExcelProcessHandle(DateTime beforeTime, DateTime afterTime) { IntPtr appProcessHandle = IntPtr.Zero; System.Diagnostics.Process[] myProcesses; DateTime startTime; myProcesses = System.Diagnostics.Process.GetProcessesByName("Excel"); //得不到Excel进程ID,暂时只能判断进程启动时间 foreach (System.Diagnostics.Process myProcess in myProcesses) { startTime = myProcess.StartTime; if (startTime >= beforeTime && startTime <= afterTime) { //myProcess.Kill(); appProcessHandle = myProcess.MainWindowHandle; //private } } return appProcessHandle; } /// /// 嵌入窗体时,设置execel.exe应用程序嵌入窗体里面的显示式样 /// /// 是否成功 private bool SetApp_EmbedExcelStyle() { this.SetApp_Exit_EditMode(); try { this.SetApp_DisplayStatusBar(false); //状态栏 this.SetApp_DisplayFormulaBar(false); //编辑栏 this.SetApp_DisplayAlerts(false); //警告提醒 //this.SetApp_DisplayFullScreen(false); //全屏 //this.SetApp_DisableAskAQuestionDropdown(true); //用户提问帮助栏 //this.SetApp_DisableCustomize(true); //用户自己定义菜单 //this.SetCommandBar_Cell_Enabled(true); //可以右键弹出浮动菜单 //this.SetApp_Display_DisplayHeadings(false); //禁止行号列标 ////this.SetSheet_ChangeActivateSheet(1); //指定激活第一个sheet this.SetCell_ActiveCell("A1"); //指定激活第一个cell单元格 ////this.SetSheet_DisplaySheet1_hiddenElseAllSheets(true); //隐藏除sheet1以外的其他的sheet //////直接指定设定 //////this.App_SetAppWorksheetMenuBarEnabled(false); //excel的系统主菜单 //////this.SetCommandBarName_Enabled("Worksheet Menu Bar", false); //////this.SetCommandBarName_Enabled("Standard", false); //////this.SetCommandBarName_Enabled("Cell", true); ////////"Standard" "Formatting" "Envelope" "Task Pane" "Tables" "Ink" "System" "" //////this.SetCommandBarName_Visible("Standard", false); //////this.SetCommandBarName_Visible("Formatting", false); //////this.SetCommandBarName_Visible("Envelope", false); //////this.SetCommandBarName_Visible("Task Pane", false); //////********************************************* //枚举所有的系统下拉菜单和命令快捷键全部隐藏和不可用 this.SetCommandBars_IEnumeratorCommandBarsName(); //this.SetApp_ExcelSystemMenu_xiala(false); return true; } catch (Exception ex) { MessageBox.Show("App设置显示式样有误!" + ex.Message); return false; } } /// /// 退出excel.exe的编辑模式 Edit Mode /// public void SetApp_Exit_EditMode() { if (m_objApp == null) { return; } if (m_objSheet == null) { return; } while (true) { try { this.Cursor = System.Windows.Forms.Cursors.WaitCursor; bool bAppReady = (bool)m_objApp.GetType().InvokeMember("Ready", BindingFlags.GetProperty, null, m_objApp, null); this.Cursor = System.Windows.Forms.Cursors.Arrow; break; //如果excel.exe退出了编辑模式则退出循环 } catch { myWin32API.SetForegroundWindow(this.appSubWinHandle); myWin32API.SetFocus(this.appSubWinHandle); //System.Threading.Thread.Sleep(100); System.Windows.Forms.SendKeys.SendWait("{ESC}"); //发送ESC键 //System.Windows.Forms.SendKeys.Send("{ESC}"); //发送ESC键 //System.Threading.Thread.Sleep(100); } } } public void SetApp_Exit_OKMode() { if (m_objApp == null) { return; } if (m_objSheet == null) { return; } while (true) { try { this.Cursor = System.Windows.Forms.Cursors.WaitCursor; bool bAppReady = (bool)m_objApp.GetType().InvokeMember("Ready", BindingFlags.GetProperty, null, m_objApp, null); this.Cursor = System.Windows.Forms.Cursors.Arrow; break; //如果excel.exe退出了编辑模式则退出循环 } catch { myWin32API.SetForegroundWindow(this.appSubWinHandle); myWin32API.SetFocus(this.appSubWinHandle); //System.Threading.Thread.Sleep(100); System.Windows.Forms.SendKeys.SendWait("{ENTER}"); //发送ESC键 //System.Windows.Forms.SendKeys.Send("{ESC}"); //发送ESC键 //System.Threading.Thread.Sleep(100); } } #region //IntPtr ip1 = myWin32API.GetActiveWindow(); //IntPtr ip2 = myWin32API.GetForegroundWindow(); //IntPtr ip3 = myWin32API.GetFocus(); //myWin32API.SetFocus(this.appSubWinHandle); //System.Windows.Forms.SendKeys.Send("a"); //发送abcd //System.Windows.Forms.SendKeys.Send("{ESC}"); //发送ESC键 //System.Windows.Forms.SendKeys.Send("{ENTER}"); //发送回车键 //SendKeys.Send("{ENTER}"); //END {END} //ENTER {ENTER} 或 ~ //ESC {ESC} #endregion } #region 设置或获取execel.exe应用程序的其他显示式样 /// /// 测试学习用 /// /// public bool AppExcel_SelfCheck() { try { int x1 = GetCommandBars_Count(); int X2 = GetMenuBars_Count(); this.GetApp_ElseProperty(); this.SetCell_Value(1, 1, "测试值"); string s = (string)GetCell_Value(1, 1); if (s != null) { MessageBox.Show(s); } this.SetRangeArray_FontProperty_EG(); string ss = GetRangeArray_FormatStyle("A1", "B5"); if (ss != null) { MessageBox.Show(ss); } this.GetMenuBars_SerialNumber(); this.SetSheet_hiddenSheet(2, false); return true; } catch (Exception ex) { MessageBox.Show("App自检有误!" + ex.Message); return false; } } /// /// 获取m_objApp 的  //Count //Name //Version /// public void GetApp_ElseProperty() { //***************************** //获取同一个excel进程中,打开的窗口数量总数 object wbCount = m_objBooks.GetType().InvokeMember("Count", BindingFlags.GetProperty, null, m_objBooks, null); Object oName = m_objApp.GetType().InvokeMember("Name", BindingFlags.GetProperty, null, m_objApp, null); Object oVersion = m_objApp.GetType().InvokeMember("Version", BindingFlags.GetProperty, null, m_objApp, new object[0]); } /// /// 返回“数据输入”模式 /// 处于“数据输入”模式时,仅可在当前选定区域的未锁定单元格中输入数据。Long 类型,可读写。 /// /// public object GetApp_DataEntryMode() { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); try { object oAppDataEntryMode = m_objApp.GetType().InvokeMember("DataEntryMode", BindingFlags.GetProperty, null, m_objApp, null); //ok return oAppDataEntryMode; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); return null; } } /// /// 设置“数据输入”模式 /// 处于“数据输入”模式时,仅可在当前选定区域的未锁定单元格中输入数据。Long 类型,可读写。 /// /// /// public bool SetApp_DataEntryMode(int _bStyle) { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); try { object[] m_Parameters_set = new Object[1] { _bStyle }; m_objApp.GetType().InvokeMember("DataEntryMode", BindingFlags.SetProperty, null, m_objApp, m_Parameters_set); return true; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); return false; } } /// /// 获取激活的ActiveWindow对象 /// /// public object GetApp_ActiveWindow() { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); try { //选择当前激活的的Window object OActiveWindow = m_objApp.GetType().InvokeMember("ActiveWindow", BindingFlags.GetProperty, null, m_objApp, null); //ok return OActiveWindow; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); return null; } } /// /// 获取激活的ActiveSheet对象 /// /// public object GetApp_ActiveSheet() { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); try { //选择当前激活的的Sheet object OActiveSheet = m_objApp.GetType().InvokeMember("ActiveSheet", BindingFlags.GetProperty, null, m_objApp, null); //ok return OActiveSheet; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); return null; } } /// /// 获取激活的ActiveCell对象 /// /// public object GetApp_ActiveCell() { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); try { //选择当前激活的的Sheet object OActiveCell = m_objApp.GetType().InvokeMember("ActiveCell", BindingFlags.GetProperty, null, m_objApp, null); //ok return OActiveCell; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); return null; } } /// /// 显示excel程序的界面 /// /// /// private void SetApp_Visible(object _objApp, bool _bVisibleAppForm) { if (m_objApp == null) { return; } ////Return control of Excel to the user. //object[] m_Parameters_VisibleAppForm = new Object[1] { true }; object[] m_Parameters_VisibleAppForm = new Object[1] { _bVisibleAppForm }; _objApp.GetType().InvokeMember("Visible", BindingFlags.SetProperty, null, _objApp, m_Parameters_VisibleAppForm); ////单步调试不能使用以下该句,否则出错 //m_objApp.GetType().InvokeMember("UserControl", BindingFlags.SetProperty, null, m_objApp, m_Parameters_VisibleAppForm); } /// /// 设置窗口的显示模式 /// /// // 1=xlNormal=正常显示 // 2=xlMinimized=最小化显示 // 3=xlMaximized=最大化显示 /// public bool SetApp_ExcelWindowState(int _bStyle) { if (m_objApp == null) { return false; } //参数 // 1=xlNormal=正常显示 // 2=xlMinimized=最小化显示 // 3=xlMaximized=最大化显示 try { object[] m_Parameters_set = new Object[1] { _bStyle }; m_objApp.GetType().InvokeMember("Windowstate", BindingFlags.SetProperty, null, m_objApp, m_Parameters_set); return true; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); return false; } } /// /// 显示excel底部状态栏 /// /// true=显示,false=隐藏 (默认 false) /// public bool SetApp_DisplayStatusBar(bool _bEnabled) { if (m_objApp == null) { return false; } //m_objExcel.DisplayStatusBar = true; //默认 false 显示excel底部状态栏 //m_objExcel.DisplayFormulaBar = false; //默认 true true = 显示录入状态栏,false = 不显示录入状态栏 //m_objExcel.DisplayAlerts = false; //默认 true =在必要时将在代码运行期间显示警告消息。设置为 False 可跳过警告并选择默认值。 ////当 DisplayAlerts 设置为 False 时,在关闭工作簿前 Excel 不会提示您保存,这样可能会导致丢失数据。 //m_objExcel.DisplayFullScreen = false; //默认 false try { object[] m_Parameters_set_false = new Object[1] { _bEnabled }; //object[] m_Parameters_set_true = new Object[1] { true }; m_objApp.GetType().InvokeMember("DisplayStatusBar", BindingFlags.SetProperty, null, m_objApp, m_Parameters_set_false); return true; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); return false; } } /// /// 显示录入状态栏 /// /// true=显示,false=隐藏 (默认 true) /// public bool SetApp_DisplayFormulaBar(bool _bEnabled) { if (m_objApp == null) { return false; } //m_objExcel.DisplayStatusBar = true; //默认 false 显示excel底部状态栏 //m_objExcel.DisplayFormulaBar = false; //默认 true true = 显示录入状态栏,false = 不显示录入状态栏 //m_objExcel.DisplayAlerts = false; //默认 true =在必要时将在代码运行期间显示警告消息。设置为 False 可跳过警告并选择默认值。 ////当 DisplayAlerts 设置为 False 时,在关闭工作簿前 Excel 不会提示您保存,这样可能会导致丢失数据。 //m_objExcel.DisplayFullScreen = false; //默认 false try { object[] m_Parameters_set_false = new Object[1] { _bEnabled }; //object[] m_Parameters_set_true = new Object[1] { true }; m_objApp.GetType().InvokeMember("DisplayFormulaBar", BindingFlags.SetProperty, null, m_objApp, m_Parameters_set_false); return true; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); return false; } } /// /// true =在必要时将在代码运行期间显示警告消息。设置为 False 可跳过警告并选择默认值 /// 当 DisplayAlerts 设置为 False 时,在关闭工作簿前 Excel 不会提示您保存,这样可能会导致丢失数据。 /// /// true=显示,false=隐藏 (默认 true) /// public bool SetApp_DisplayAlerts(bool _bEnabled) { if (m_objApp == null) { return false; } //m_objExcel.DisplayStatusBar = true; //默认 false 显示excel底部状态栏 //m_objExcel.DisplayFormulaBar = false; //默认 true true = 显示录入状态栏,false = 不显示录入状态栏 //m_objExcel.DisplayAlerts = false; //默认 true =在必要时将在代码运行期间显示警告消息。设置为 False 可跳过警告并选择默认值。 ////当 DisplayAlerts 设置为 False 时,在关闭工作簿前 Excel 不会提示您保存,这样可能会导致丢失数据。 //m_objExcel.DisplayFullScreen = false; //默认 false try { object[] m_Parameters_set_false = new Object[1] { _bEnabled }; //object[] m_Parameters_set_true = new Object[1] { true }; m_objApp.GetType().InvokeMember("DisplayAlerts", BindingFlags.SetProperty, null, m_objApp, m_Parameters_set_false); return true; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); return false; } } /// /// true =全屏 false=不全屏 (默认 false) /// /// true =全屏 false=不全屏 (默认 false) /// public bool SetApp_DisplayFullScreen(bool _bEnabled) { if (m_objApp == null) { return false; } //m_objExcel.DisplayStatusBar = true; //默认 false 显示excel底部状态栏 //m_objExcel.DisplayFormulaBar = false; //默认 true true = 显示录入状态栏,false = 不显示录入状态栏 //m_objExcel.DisplayAlerts = false; //默认 true =在必要时将在代码运行期间显示警告消息。设置为 False 可跳过警告并选择默认值。 ////当 DisplayAlerts 设置为 False 时,在关闭工作簿前 Excel 不会提示您保存,这样可能会导致丢失数据。 //m_objExcel.DisplayFullScreen = false; //默认 false try { object[] m_Parameters_set_false = new Object[1] { _bEnabled }; //object[] m_Parameters_set_true = new Object[1] { true }; m_objApp.GetType().InvokeMember("DisplayFullScreen", BindingFlags.SetProperty, null, m_objApp, m_Parameters_set_false); return true; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); return false; } } /// /// 获取excel.exe的准备状态 /// /// public bool GetApp_Ready() { if (m_objApp == null) { return false; } try { bool bAppReady = (bool)m_objApp.GetType().InvokeMember("Ready", BindingFlags.GetProperty, null, m_objApp, null); return bAppReady; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); return false; } } /// /// 获取 用户通过键盘和鼠标与Excel之间的交互的状态 true =可以交互 false=不能交互 (默认 true) /// /// public bool GetApp_Interactive() { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); try { bool bInteractive = (bool)m_objApp.GetType().InvokeMember("Interactive", BindingFlags.GetProperty, null, m_objApp, null); return bInteractive; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); return false; } } /// /// 设置用户通过键盘和鼠标与Excel之间的交互 true =可以交互 false=不能交互 (默认 true) /// /// true =可以交互 false=不能交互 (默认 true) /// public bool SetApp_Interactive(bool _bEnabled) { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); try { object[] m_Parameters_set_false = new Object[1] { _bEnabled }; //object[] m_Parameters_set_true = new Object[1] { true }; m_objApp.GetType().InvokeMember("Interactive", BindingFlags.SetProperty, null, m_objApp, m_Parameters_set_false); return true; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); return false; } } /// /// 是否显示 禁止"键入需要帮助的问题 DisableAskAQuestionDropdown" /// /// /// public bool SetApp_DisableAskAQuestionDropdown(bool _bDisable) { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); object objCommandBars = m_objApp.GetType().InvokeMember("CommandBars", BindingFlags.GetProperty, null, m_objApp, null); try { m_objApp.GetType().InvokeMember("DisableAskAQuestionDropdown", BindingFlags.SetProperty, null, objCommandBars, new Object[1] { _bDisable }); System.Runtime.InteropServices.Marshal.ReleaseComObject(objCommandBars); GC.GetTotalMemory(true); return true; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); System.Runtime.InteropServices.Marshal.ReleaseComObject(objCommandBars); GC.GetTotalMemory(true); return false; } } /// /// 是否显示 禁止“用户自己定义菜单” DisableCustomize /// /// /// public bool SetApp_DisableCustomize(bool _bDisable) // { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); object objCommandBars = m_objApp.GetType().InvokeMember("CommandBars", BindingFlags.GetProperty, null, m_objApp, null); try { m_objApp.GetType().InvokeMember("DisableCustomize", BindingFlags.SetProperty, null, objCommandBars, new Object[1] { true }); System.Runtime.InteropServices.Marshal.ReleaseComObject(objCommandBars); GC.GetTotalMemory(true); return true; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); System.Runtime.InteropServices.Marshal.ReleaseComObject(objCommandBars); GC.GetTotalMemory(true); return false; } } /// /// 显示行号列标 /// /// 是否显示,false = 禁止显示 /// 是否成功 public bool SetApp_Display_DisplayHeadings(bool _bVisible) { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); try { object[] m_Parameters_set_false = new Object[1] { _bVisible }; //选择当前激活的 object OActiveWindow = m_objApp.GetType().InvokeMember("ActiveWindow", BindingFlags.GetProperty, null, m_objApp, null); //ok m_objApp.GetType().InvokeMember("DisplayHeadings", BindingFlags.SetProperty, null, OActiveWindow, m_Parameters_set_false); //ok //object oActivatorSheet = m_objSheets.GetType().InvokeMember("ActiveSheet", BindingFlags.GetProperty, null, m_objSheets, null); //错误 //m_objApp.GetType().InvokeMember("DisplayHeadings", BindingFlags.SetProperty, null, oActivatorSheet, m_Parameters_set_false); return true; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); return false; } } /// /// .获取:直接在单元格中进行编辑的能力。如果为 False,则只能在公式栏内编辑单元格 /// /// public bool GetApp_EditDirectlyInCell() { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); try { object XX = m_objApp.GetType().InvokeMember("EditDirectlyInCell ", BindingFlags.GetProperty, null, m_objApp, null); return (bool)XX; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); return false; } } /// /// 设置:直接在单元格中进行编辑的能力。如果为 False,则只能在公式栏内编辑单元格 /// /// /// public bool SetApp_EditDirectlyInCell(bool _bEnabled) { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); try { object[] m_Parameters_set_false = new Object[1] { _bEnabled }; //object[] m_Parameters_set_true = new Object[1] { true }; m_objApp.GetType().InvokeMember("EditDirectlyInCell ", BindingFlags.SetProperty, null, m_objApp, m_Parameters_set_false); return true; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); return false; } } /// /// 待用 /// /// /// /// /// internal static object SetApp_PropertyInternational(object target, string name, params object[] args) { return target.GetType().InvokeMember(name, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.SetProperty | System.Reflection.BindingFlags.Public, null, target, args, new System.Globalization.CultureInfo(1033)); } /// /// 待用 /// /// /// /// /// internal static object GetApp_PropertyInternational(object target, string name, params object[] args) { return target.GetType().InvokeMember(name, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.GetProperty | System.Reflection.BindingFlags.Public, null, target, args, new System.Globalization.CultureInfo(1033)); } #endregion #region 设置 菜单和命令的显示式样 /// /// 得到CommandBars的总数 /// /// CommandBars的总数 public int GetCommandBars_Count() { if (m_objApp == null) { return 0; } object objCommandBars = m_objApp.GetType().InvokeMember("CommandBars", BindingFlags.GetProperty, null, m_objApp, null); //Count try { int CommandBarsCount = (int)m_objApp.GetType().InvokeMember("Count", BindingFlags.GetProperty, null, objCommandBars, null); //Count object[] m_Parameters_set = new Object[1] { false }; //m_objApp.GetType().InvokeMember("Visible", BindingFlags.SetProperty, null, objCommandBars, m_Parameters_set); System.Runtime.InteropServices.Marshal.ReleaseComObject(objCommandBars); GC.GetTotalMemory(true); return CommandBarsCount; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); System.Runtime.InteropServices.Marshal.ReleaseComObject(objCommandBars); GC.GetTotalMemory(true); return 0; } } /// /// 得到MenuBars的总数 /// /// MenuBars的总数 public int GetMenuBars_Count() { if (m_objApp == null) { return 0; } object objMenuBars = m_objApp.GetType().InvokeMember("MenuBars", BindingFlags.GetProperty, null, m_objApp, null); //Count try { int CommandBarsCount = (int)m_objApp.GetType().InvokeMember("Count", BindingFlags.GetProperty, null, objMenuBars, null); //Count System.Runtime.InteropServices.Marshal.ReleaseComObject(objMenuBars); GC.GetTotalMemory(true); return CommandBarsCount; } catch (Exception ex) { MessageBox.Show("错误!错误原因:" + ex.Message); System.Runtime.InteropServices.Marshal.ReleaseComObject(objMenuBars); GC.GetTotalMemory(true); return 0; } } /// /// 是否禁止 显示Worksheet Menu Bar 系统菜单 /// /// /// public bool SetMenuBars_SystemMenuBar_Enabled(bool _bEnabled) // { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); object[] m_Parameters_Get = new Object[1] { "Worksheet Menu Bar" }; object objCommandBars = m_objApp.GetType().InvokeMember("CommandBars", BindingFlags.GetProperty, null, m_objApp, m_Parameters_Get); try { object X1 = objCommandBars.GetType().InvokeMember("Name", BindingFlags.GetProperty, null, objCommandBars, null); //可以正确执行 object X2 = objCommandBars.GetType().InvokeMember("Visible", BindingFlags.GetProperty, null, objCommandBars, null); //可以正确执行 object X3 = objCommandBars.GetType().InvokeMember("Enabled", BindingFlags.GetProperty, null, objCommandBars, null); //可以正确执行 //object X4 = m_objApp.GetType().InvokeMember("Caption", BindingFlags.GetProperty, null, se.Current, null); //不可以正确执行 //Enabled //Visible object[] m_Parameters_set = new Object[1] { _bEnabled }; objCommandBars.GetType().InvokeMember("Enabled", BindingFlags.SetProperty, null, objCommandBars, m_Parameters_set); System.Runtime.InteropServices.Marshal.ReleaseComObject(objCommandBars); GC.GetTotalMemory(true); return true; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); System.Runtime.InteropServices.Marshal.ReleaseComObject(objCommandBars); GC.GetTotalMemory(true); return false; } } /// /// 是否显示 显示Worksheet Menu Bar 系统菜单 /// /// /// public bool SetMenuBars_SystemMenuBar_Visible(bool _bEnabled) // { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); object[] m_Parameters_Get = new Object[1] { "Worksheet Menu Bar" }; object objCommandBars = m_objApp.GetType().InvokeMember("CommandBars", BindingFlags.GetProperty, null, m_objApp, m_Parameters_Get); try { object X1 = objCommandBars.GetType().InvokeMember("Name", BindingFlags.GetProperty, null, objCommandBars, null); //可以正确执行 object X2 = objCommandBars.GetType().InvokeMember("Visible", BindingFlags.GetProperty, null, objCommandBars, null); //可以正确执行 object X3 = objCommandBars.GetType().InvokeMember("Enabled", BindingFlags.GetProperty, null, objCommandBars, null); //可以正确执行 //object X4 = m_objApp.GetType().InvokeMember("Caption", BindingFlags.GetProperty, null, se.Current, null); //不可以正确执行 //Enabled //Visible object[] m_Parameters_set = new Object[1] { _bEnabled }; objCommandBars.GetType().InvokeMember("Visible", BindingFlags.SetProperty, null, objCommandBars, m_Parameters_set); System.Runtime.InteropServices.Marshal.ReleaseComObject(objCommandBars); GC.GetTotalMemory(true); return true; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); System.Runtime.InteropServices.Marshal.ReleaseComObject(objCommandBars); GC.GetTotalMemory(true); return false; } } /// /// 是否禁止 点击单元格的右健弹出的浮动菜单 disable the Cell menu (menu when you right click on a cell) /// /// /// public bool SetCommandBar_Cell_Enabled(bool _bEnabled) // { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); object[] m_Parameters_Get = new Object[1] { "Cell" }; object objCommandBars = m_objApp.GetType().InvokeMember("CommandBars", BindingFlags.GetProperty, null, m_objApp, m_Parameters_Get); try { object[] m_Parameters_set = new Object[1] { _bEnabled }; objCommandBars.GetType().InvokeMember("Enabled", BindingFlags.SetProperty, null, objCommandBars, m_Parameters_set); System.Runtime.InteropServices.Marshal.ReleaseComObject(objCommandBars); GC.GetTotalMemory(true); return true; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); System.Runtime.InteropServices.Marshal.ReleaseComObject(objCommandBars); GC.GetTotalMemory(true); return false; } } /// ///指定CommandBars名字 来设置其禁止与否 其中针对是否禁用  Worksheet Menu Bar 只能选择Enabled",不能Visible /// /// 先得确定是否有CommandBars 的名字, 如 "Worksheet Menu Bar" "Standard" "Cell" /// 是否禁用 /// public bool SetCommandBarName_Enabled(string _strCommandBarsName, bool _bEnabled) { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); object[] m_Parameters_Get = new Object[1] { _strCommandBarsName }; object objCommandBars = m_objApp.GetType().InvokeMember("CommandBars", BindingFlags.GetProperty, null, m_objApp, m_Parameters_Get); try { object[] m_Parameters_set = new Object[1] { _bEnabled }; objCommandBars.GetType().InvokeMember("Enabled", BindingFlags.SetProperty, null, objCommandBars, m_Parameters_set); System.Runtime.InteropServices.Marshal.ReleaseComObject(objCommandBars); GC.GetTotalMemory(true); return true; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); System.Runtime.InteropServices.Marshal.ReleaseComObject(objCommandBars); GC.GetTotalMemory(true); return false; } } /// /// 指定CommandBars名字 来设置其显示与否 其中针对是否显示  Worksheet Menu Bar 只能选择Enabled",不能Visible /// /// 先得确定是否有CommandBars的名字 如"Standard" "Formatting" "Envelope" "Task Pane" /// /// public bool SetCommandBarName_Visible(string _strCommandBarsName, bool _bVisible) { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); object[] m_Parameters_Get = new Object[1] { _strCommandBarsName }; object objCommandBars = m_objApp.GetType().InvokeMember("CommandBars", BindingFlags.GetProperty, null, m_objApp, m_Parameters_Get); try { if ((bool)objCommandBars.GetType().InvokeMember("Visible", BindingFlags.GetProperty, null, objCommandBars, null)) { object[] m_Parameters_set = new Object[1] { _bVisible }; objCommandBars.GetType().InvokeMember("Visible", BindingFlags.SetProperty, null, objCommandBars, m_Parameters_set); } System.Runtime.InteropServices.Marshal.ReleaseComObject(objCommandBars); GC.GetTotalMemory(true); return true; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); System.Runtime.InteropServices.Marshal.ReleaseComObject(objCommandBars); GC.GetTotalMemory(true); return false; } } /// /// 设置excel.exe应用程序的系统下拉菜单的Enabled 和Visible : true=(Enabled + Visible),false= (禁止 + 不可见) /// /// true=(Enabled + Visible),false= (禁止 + 不可见) /// public void SetApp_ExcelSystemMenu_xiala(bool _bEnabled) { this.SetCommandBarName_Enabled("Worksheet Menu Bar", _bEnabled); ; //excel的系统主菜单 this.SetCommandBarName_Visible("Worksheet Menu Bar", _bEnabled); ; //excel的系统主菜单 } /// /// 设置excel.exe应用程序的标准命令工具栏(Standard)的Enabled 和Visible : true=(Enabled + Visible),false= (禁止 + 不可见) /// /// true=(Enabled + Visible),false= (禁止 + 不可见) /// public void SetApp_ExcelSystemMenu_Standard(bool _bEnabled) { this.SetCommandBarName_Enabled("Standard", _bEnabled); ; //excel的系统主菜单 this.SetCommandBarName_Visible("Standard", _bEnabled); ; //excel的系统主菜单 } /// /// 设置excel.exe应用程序的标准格式化工具栏(Standard)的Enabled 和Visible : true=(Enabled + Visible),false= (禁止 + 不可见) /// /// true=(Enabled + Visible),false= (禁止 + 不可见) /// public void SetApp_ExcelSystemMenu_Formatting(bool _bEnabled) { this.SetCommandBarName_Enabled("Formatting", _bEnabled); ; //excel的系统主菜单 this.SetCommandBarName_Visible("Formatting", _bEnabled); ; //excel的系统主菜单 } /// /// 指定CommandBars名字的ID号 来设置其显示与否 其中针对是否显示 如"文件"的ID为"30002" ,该方法尚在测试,不能正常使用 /// /// 如"文件"的ID为"30002" /// public bool SetCommandBarID_Visible(int _nCommandBarID) //指定ID { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); try { //Standard //Menu Bar // Standard // Formatting // Ink // Envelope // Online Meeting // Print Preview // System // Tables // Task Pane object[] m_Parameters_Get = new Object[1] { "Worksheet Menu Bar" }; //{ "Worksheet Menu Bar" }; //Standard object objCommandBars = m_objApp.GetType().InvokeMember("CommandBars", BindingFlags.GetProperty, null, m_objApp, m_Parameters_Get); //OK m_Parameters_Get = new Object[1] { 30002 }; //可以这样定义,但后面不知道怎样调用方法 object objCommandBarControl = objCommandBars.GetType().InvokeMember("Controls", BindingFlags.GetProperty, null, objCommandBars, null); //OK object[] m_Parameters_set = new Object[1] { false }; ////Enabled //Visible objCommandBars.GetType().InvokeMember("Visible", BindingFlags.SetProperty, null, objCommandBars, m_Parameters_set); //??? System.Runtime.InteropServices.Marshal.ReleaseComObject(objCommandBarControl); System.Runtime.InteropServices.Marshal.ReleaseComObject(objCommandBars); GC.GetTotalMemory(true); return true; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); return false; } } /// /// 枚举CommandBars的名字 再禁止其使能 全部Enabled = false; /// /// public bool SetCommandBars_IEnumeratorCommandBarsName() //App_SetAppCommandBarsVisible //Standard //Menu Bar { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); try { object objCommandBars = m_objApp.GetType().InvokeMember("CommandBars", BindingFlags.GetProperty, null, m_objApp, null); object objCommandBarsGetEnumerator = objCommandBars.GetType().InvokeMember("GetEnumerator", BindingFlags.InvokeMethod, null, objCommandBars, null); string strCommandBarsName = ""; System.Collections.IEnumerator se = (System.Collections.IEnumerator)objCommandBarsGetEnumerator; while (se.MoveNext()) { object X1 = objCommandBars.GetType().InvokeMember("Name", BindingFlags.GetProperty, null, se.Current, null); //可以正确执行 object X2 = objCommandBars.GetType().InvokeMember("Visible", BindingFlags.GetProperty, null, se.Current, null); //可以正确执行 object X3 = objCommandBars.GetType().InvokeMember("Enabled", BindingFlags.GetProperty, null, se.Current, null); //可以正确执行 //object X4 = m_objApp.GetType().InvokeMember("Caption", BindingFlags.GetProperty, null, se.Current, null); //不可以正确执行 strCommandBarsName += (string)X1 + " Visible===" + X2.ToString() + " Enabled===" + X3.ToString() + "\r\n"; if ((bool)X2) { if ((bool)X3) { SetCommandBarName_Enabled(X1.ToString(), false); //禁止 } } } //MessageBox.Show(strCommandBarsName); //调试用,察看CommandBars的名字和状态 //SuperTools.FileTools.StringToSaveLogFile(strCommandBarsName, false); objCommandBarsGetEnumerator = null; System.Runtime.InteropServices.Marshal.ReleaseComObject(objCommandBars); GC.GetTotalMemory(true); return true; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); return false; } } /// /// 枚举MenuBars /// /// public bool GetMenuBars_SerialNumber() //App_SetAppCommandBarsVisible //Standard //Menu Bar { if (m_objApp == null) { return false; } int x = GetMenuBars_Count(); try { //object[] m_Parameters_Get = new Object[1] { 30002 }; object objMenuBars = m_objApp.GetType().InvokeMember("MenuBars", BindingFlags.GetProperty, null, m_objApp, null); //  GetEnumerator object objMenuBarsGetEnumerator = m_objApp.GetType().InvokeMember("GetEnumerator", BindingFlags.GetProperty, null, objMenuBars, null); //object objMenuBars11 = m_objApp.GetType().InvokeMember("Worksheet Menu Bar", BindingFlags.GetProperty, null, objMenuBars, null); string strCommandBarsName = ""; System.Collections.IEnumerator se = (System.Collections.IEnumerator)objMenuBarsGetEnumerator; int i = 0; while (se.MoveNext()) { i = i + 1; object X1 = "菜单" + i.ToString(); // se.Current.GetType().InvokeMember("ID", BindingFlags.GetProperty, null, se.Current, null); //不能正确执行 //object X2 = m_objApp.GetType().InvokeMember("ID", BindingFlags.GetProperty, null, se.Current, null); //不能正确执行 strCommandBarsName += X1.ToString() + "\r\n"; //object[] m_Parameters_set_1 = new Object[1] { false }; //Visible //Enabled //m_objApp.GetType().InvokeMember("Visible", BindingFlags.SetPropert, null, se.Current, m_Parameters_set_1); //??? } MessageBox.Show("枚举MenuBars如下:\r\n" + strCommandBarsName); //System.Runtime.InteropServices.Marshal.ReleaseComObject(objMenuBarsGetEnumerator); objMenuBarsGetEnumerator = null; //System.Runtime.InteropServices.Marshal.ReleaseComObject(objMenuBars); //GC.GetTotalMemory(true); return true; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); return false; } } #endregion #region sheet 操作 /// /// 获取sheets的总数 /// /// sheets的总数 public int GetSheet_SheetsCount() { if (m_objApp == null) { return 0; } if (m_objSheet == null) { return 0; } this.SetApp_Exit_EditMode(); try { int SheetsCount = (int)m_objSheets.GetType().InvokeMember("Count", BindingFlags.GetProperty, null, m_objSheets, null); return SheetsCount; } catch (Exception ex) { MessageBox.Show("错误!错误原因:" + ex.Message); return 0; } } /// /// 获取激活的sheet对象 /// /// public object GetSheet_Active_Sheet() { if (m_objApp == null) { return null; } if (m_objSheet == null) { return null; } this.SetApp_Exit_EditMode(); try { //选择当前激活的的Window object OActiveWindow = m_objApp.GetType().InvokeMember("ActiveWindow", BindingFlags.GetProperty, null, m_objApp, null); //ok //选择当前激活的的Sheet object OActiveSheet = m_objApp.GetType().InvokeMember("ActiveSheet", BindingFlags.GetProperty, null, OActiveWindow, null); //ok return OActiveSheet; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); return null; } } /// /// 获取激活的sheet 的sheet 的名字 /// /// public string GetSheet_ActiveSheetName() { if (m_objApp == null) { return string.Empty; } if (m_objSheet == null) { return string.Empty; } this.SetApp_Exit_EditMode(); object m_objActiveSheet = m_objApp.GetType().InvokeMember("ActiveSheet", BindingFlags.GetProperty, null, m_objApp, null); if (m_objActiveSheet == null) { return ""; } string SheetName; try { SheetName = (string)m_objActiveSheet.GetType().InvokeMember("Name", BindingFlags.GetProperty, null, m_objActiveSheet, null); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objActiveSheet); GC.GetTotalMemory(true); return SheetName; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objActiveSheet); GC.GetTotalMemory(true); return string.Empty; } } /// /// 获取制定sheet的名字 /// /// sheet序号,从1开始 /// sheet的名字 public string GetSheet_SheetName(int iNoSheet) //GetSheet_ActiveSheetName { if (m_objSheets == null) { return string.Empty; } int SheetsCount = GetSheet_SheetsCount(); if (iNoSheet > SheetsCount || iNoSheet < 1) { return string.Empty; } object[] m_Parameters_set = new Object[1] { iNoSheet }; //第一个sheet:sheet1 object m_objSheet_1 = m_objSheets.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, m_objSheets, m_Parameters_set); string SheetName; try { SheetName = (string)m_objSheet_1.GetType().InvokeMember("Name", BindingFlags.GetProperty, null, m_objSheet_1, null); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objSheet_1); GC.GetTotalMemory(true); return SheetName; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objSheet_1); GC.GetTotalMemory(true); return string.Empty; } } /// /// 改变Sheet的名字 /// /// Sheet序号,从1开始 /// 新名字 /// 是否正确返回 public bool SetSheet_ChangSheetName(int iNoSheet, string _SheetName) // { if (m_objSheets == null) { return false; } int SheetsCount = GetSheet_SheetsCount(); if (iNoSheet > SheetsCount || iNoSheet < 1) { return false; } object[] m_Parameters_set = new Object[1] { iNoSheet }; //第一个sheet:sheet1 object m_objSheet_1 = m_objSheets.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, m_objSheets, m_Parameters_set); try { m_Parameters_set = new Object[1] { _SheetName }; m_objSheet_1.GetType().InvokeMember("Name", BindingFlags.SetProperty, null, m_objSheet_1, m_Parameters_set); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objSheet_1); GC.GetTotalMemory(true); return true; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objSheet_1); GC.GetTotalMemory(true); return false; } } /// /// 根据sheet的表格序号,改变当前工作sheet /// /// 待激活的sheet序号,从1开始 public bool SetSheet_ChangeActivateSheet(int iNoSheet) { if (m_objSheets == null) { return false; } int SheetsCount = GetSheet_SheetsCount(); if (iNoSheet > SheetsCount || iNoSheet < 1) { return false; } object[] m_Parameters_ActivatorSheet = new Object[1] { iNoSheet }; //第一个sheet:sheet1 object m_objSheet_1 = m_objSheets.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, m_objSheets, m_Parameters_ActivatorSheet); try { m_objSheet_1.GetType().InvokeMember("Activate", BindingFlags.InvokeMethod, null, m_objSheet_1, null); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objSheet_1); GC.GetTotalMemory(true); return true; } catch (Exception ex) { MessageBox.Show("激活sheet序号错误!错误原因:" + ex.Message); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objSheet_1); GC.GetTotalMemory(true); return false; } } /// /// 只显示sheet1,其余的sheet全部隐藏 /// /// false = 显示,true =隐藏 /// public bool SetSheet_DisplaySheet1_hiddenElseAllSheets(bool bVisible) { if (m_objSheets == null) { return false; } try { int SheetsCount = GetSheet_SheetsCount(); for (int i = 2; i <= SheetsCount; i++) //保留第一个Sheet显示 { this.SetSheet_hiddenSheet(i, bVisible); } return true; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); return false; } } /// /// 是否显示隐藏 sheet /// /// sheet的序号 /// false = 显示,true =隐藏 /// public bool SetSheet_hiddenSheet(int iNoSheet, bool _bVisible) { if (m_objSheets == null) { return false; } int SheetsCount = GetSheet_SheetsCount(); if (iNoSheet > SheetsCount || iNoSheet < 1) { return false; } object[] m_Parameters_ActivatorSheet = new Object[1] { iNoSheet }; //第一个sheet:sheet1 object m_objSheet_1 = m_objSheets.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, m_objSheets, m_Parameters_ActivatorSheet); try { object[] m_Parameters_Set = new Object[1]; if (_bVisible) { m_Parameters_Set[0] = 2; //隐藏 } else { m_Parameters_Set[0] = 1; //取消 } m_objSheet_1.GetType().InvokeMember("Visible", BindingFlags.SetProperty, null, m_objSheet_1, m_Parameters_Set); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objSheet_1); GC.GetTotalMemory(true); return true; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objSheet_1); GC.GetTotalMemory(true); return false; } } #endregion #region 单元格的读写操作 /// /// 内部使用,获取激活单元格的属性 /// /// 激活单元格的名字 /// 激活单元格的值 internal object GetCell_ActiveCell_Property(string _strPropertyName) { if (m_objApp == null) { return null; } if (m_objSheet == null) { return null; } this.SetApp_Exit_EditMode(); object m_objActiveCell = m_objApp.GetType().InvokeMember("ActiveCell", BindingFlags.GetProperty, null, m_objApp, null); if (m_objActiveCell == null) { return 0; } try { object oPropertyValue = (int)m_objActiveCell.GetType().InvokeMember(_strPropertyName, BindingFlags.GetProperty, null, m_objActiveCell, null); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objActiveCell); GC.GetTotalMemory(true); return oPropertyValue; } catch (Exception ex) { MessageBox.Show("错误原因:" + ex.Message); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objActiveCell); GC.GetTotalMemory(true); return null; } } /// /// 得到激活单元格的列的序号,从1开始 /// /// public int GetCell_ActiveCell_ColumnNumber() // object m_obj { int nColumnNumber = (int)this.GetCell_ActiveCell_Property("Column"); return nColumnNumber; } /// /// 得到激活单元格的列名 /// /// public string GetCell_ActiveCell_ColumnName() { int n1 = this.GetCell_ActiveCell_ColumnNumber(); string str1 = SuperTools.UC_EmbedExcelIntoWinFormNoDLL.Tool_NtoL(n1); return str1; } /// /// 得到激活单元格的行的序号,从1开始 /// /// public int GetCell_ActiveCell_RowNumber() { int nRowNumber = (int)GetCell_ActiveCell_Property("Row"); return nRowNumber; } /// /// 获取单元格的位置名字,如得到"B5" /// /// public string GetCell_ActiveCell_Name() { string strActiveCell_RowName = this.GetCell_ActiveCell_RowNumber().ToString(); string strActiveCell_ColumnName = this.GetCell_ActiveCell_ColumnName(); return strActiveCell_ColumnName + strActiveCell_RowName; } /// /// Range位置,如:"A1" /// /// /// public bool SetCell_ActiveCell(string strRange) { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); try { //object[] Parameters_range = new object[2] { "A1", System.Reflection.Missing.Value }; //object[] Parameters_range = new object[2] { strRange, System.Reflection.Missing.Value }; object[] Parameters_range = new object[2]; Parameters_range[0] = strRange; Parameters_range[1] = System.Reflection.Missing.Value; object m_objRange = m_objSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, m_objSheet, Parameters_range); if (m_objRange == null) { Console.WriteLine("出错啦: range == null,请检查range的设置。"); } m_objRange.GetType().InvokeMember("Activate", BindingFlags.InvokeMethod, null, m_objRange, null); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRange); GC.GetTotalMemory(true); return true; } catch (Exception ex) { MessageBox.Show("写入错误!错误原因:" + ex.Message); return false; } } /// /// 写Cells单元格的值 /// /// 第x行,Excel的起始列为1 /// 第y列,Excel的起始行为1 /// 写入的数值 /// bool,是否正确写入 public bool SetCell_Value(int x, int y, string strWriteValue) { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); try { object[] Parameters_Cells = new object[2] { x, y }; //第x行,第y列 object m_objCells = m_objSheet.GetType().InvokeMember("Cells", BindingFlags.GetProperty, null, m_objSheet, Parameters_Cells); if (m_objCells == null) { Console.WriteLine("出错啦: m_objCells == null,请检查Cells的设置。"); } //向指定单元格填写内容值 object[] Parameters_WriteValue = new Object[1] { strWriteValue }; //文本值写到excel当中 m_objCells.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, m_objCells, Parameters_WriteValue); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objCells); GC.GetTotalMemory(true); return true; } catch (Exception ex) { MessageBox.Show("写入错误!错误原因:" + ex.Message); return false; } } /// /// 获取Cells单元格的值 /// /// 第x行,Excel的起始列为1 /// 第y列,Excel的起始行为1 /// object public object GetCell_Value(int x, int y) { if (m_objApp == null) { return null; } if (m_objSheet == null) { return null; } this.SetApp_Exit_EditMode(); object[] Parameters_Cells = new object[2] { x, y }; //第x行,第y列 object m_objCells = m_objSheet.GetType().InvokeMember("Cells", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, m_objSheet, Parameters_Cells); if (m_objCells == null) { Console.WriteLine("出错啦: Cells == null,请检查Cells的设置。"); } object m_objCellsValue = m_objCells.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, m_objCells, new object[0]); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objCells); GC.GetTotalMemory(true); return m_objCellsValue; } /// /// 获取Cells单元格的值 ,并将该单元格的值转化为string的数据类型 /// /// 第x行,Excel的起始列为1 /// 第y列,Excel的起始行为1 /// Cells单元格的本文值 public string GetCell_Value_toString(int x, int y) { object ob1 = this.GetCell_Value(x, y); if (ob1 != null) { string ss = ob1.ToString(); return ss; } else { return ""; } } /// /// 写Range单元格的值 /// /// Range单元格位置,如"A1" /// /// public bool SetRange_Value(string strRange, string strWriteValue) { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); try { //object[] Parameters_range = new object[2] { "A1", System.Reflection.Missing.Value }; //object[] Parameters_range = new object[2] { strRange, System.Reflection.Missing.Value }; object[] Parameters_range = new object[2]; Parameters_range[0] = strRange; Parameters_range[1] = System.Reflection.Missing.Value; object m_objRange = m_objSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, m_objSheet, Parameters_range); if (m_objRange == null) { Console.WriteLine("出错啦: range == null,请检查range的设置。"); } //向指定单元格填写内容值 object[] Parameters_WriteValue = new Object[1] { strWriteValue }; //文本值写到excel当中 m_objRange.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, m_objRange, Parameters_WriteValue); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRange); GC.GetTotalMemory(true); return true; } catch (Exception ex) { MessageBox.Show("写入错误!错误原因:" + ex.Message); return false; } } /// /// 获取Range单元格的值 /// /// Range位置,如:"A1" /// object public object GetRange_Value(string strRange) { if (m_objApp == null) { return null; } if (m_objSheet == null) { return null; } this.SetApp_Exit_EditMode(); //object[] Parameters_range = new object[2] { "A1", System.Reflection.Missing.Value }; object[] Parameters_range = new object[2] { strRange, System.Reflection.Missing.Value }; object m_objRange = m_objSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, m_objSheet, Parameters_range); if (m_objRange == null) { Console.WriteLine("出错啦: range == null,请检查range的设置。"); } object m_objRangeValue = m_objRange.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, m_objRange, new object[0]); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRange); GC.GetTotalMemory(true); return m_objRangeValue; } /// /// 获取Range单元格的值 ,并将该单元格的值转化为string的数据类型 /// /// Range位置,如:"A1" /// Range单元格的本文值 public string GetRange_Value_toString(string strRange) { object ob1 = GetRange_Value(strRange); if (ob1 != null) { string ss = ob1.ToString(); return ss; } else { return ""; } } /// /// 将二维数组 写入 excel /// /// 起始位置 如"A1" /// 终止位置 如"B5" /// 写入的二维数组的值,可以是各种数据类型 /// bool,是否正确写入 public bool SetRangeArray_Value(string _BeginPoint, string _EndPoint, object[,] _Array_Value) { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); try { //得到range数组 //object[] Parameters_rangeArray = new object[] { "A1", "B5" }; object[] Parameters_rangeArray = new object[] { _BeginPoint, _EndPoint }; object m_objRangeArray = m_objSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, m_objSheet, Parameters_rangeArray); if (m_objRangeArray == null) { Console.WriteLine("出错啦: range == null,请检查range的设置。"); } //************************ //得到写入值 Object[] ParametersArray_WriteValue = new Object[1]; ParametersArray_WriteValue[0] = _Array_Value; //赋值:数值类型=int //****************** m_objRangeArray.GetType().InvokeMember("Value2", BindingFlags.SetProperty, null, m_objRangeArray, ParametersArray_WriteValue); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRangeArray); GC.GetTotalMemory(true); return true; } catch (Exception ex) { MessageBox.Show("写入错误!错误原因:" + ex.Message); return false; } } /// /// 将二维数组 写入 excel的一个实例,写入不同的数据类型 /// /// 起始位置 如"A1" /// EndPoint">终止位置 如"B5" /// 数据类型,如ypeof(int) typeof(String) typeof(bool) typeof(DateTime) typeof(double) /// public bool SetRangeArray_Value_EG(string _BeginPoint, string _EndPoint, System.Type _myDataType) { try { //************************ int BeginPoint_y = System.Convert.ToInt16(_BeginPoint.Substring(1, 1)); int EndPoint_y = System.Convert.ToInt16(_EndPoint.Substring(1, 1)); int rows = EndPoint_y - BeginPoint_y + 1; //************************ string strBeginPoint_X = _BeginPoint.Substring(0, 1); string strEndPoint_X = _EndPoint.Substring(0, 1); int columns = strEndPoint_X[0] - strBeginPoint_X[0] + 1; //************************ Object[,] EG_Array_WriteValue = new object[rows, columns]; #region 各种数据类型 switch (_myDataType.Name) { case "Int32": //typeof(double) int[,] Array_int_Value = new int[rows, columns]; //赋值:数值类型=int //typeof(int) for (int i = 0; i < rows; i++) { for (int j = 0; j < columns; j++) { Array_int_Value[i, j] = i + j; } } Array.Copy(Array_int_Value, EG_Array_WriteValue, rows * columns); break; case "String": //typeof(string) string[,] Array_string_Value = new string[rows, columns]; //赋值:数值类型=string for (int i = 0; i < rows; i++) { for (int j = 0; j < columns; j++) { Array_string_Value[i, j] = i.ToString() + "<>" + j.ToString(); } } Array.Copy(Array_string_Value, EG_Array_WriteValue, rows * columns); break; case "DateTime": DateTime[,] Array_DateTime_Value = new DateTime[rows, columns]; //赋值:数值类型=时间 for (int i = 0; i < rows; i++) { for (int j = 0; j < columns; j++) { Array_DateTime_Value[i, j] = DateTime.Now.Date; //取得当前系统时间 } } Array.Copy(Array_DateTime_Value, EG_Array_WriteValue, rows * columns); break; case "Boolean": //typeof(bool) Boolean[,] Array_bool_Value = new Boolean[rows, columns]; //赋值:数值类型=Bool for (int i = 0; i < rows; i++) { for (int j = 0; j < columns; j++) { Array_bool_Value[i, j] = true; } } Array.Copy(Array_bool_Value, EG_Array_WriteValue, rows * columns); break; } #endregion //****************** SetRangeArray_Value(_BeginPoint, _EndPoint, EG_Array_WriteValue); //调用本类中的App_SetRangeArrayValue方法 return true; ; //******************V } catch (Exception ex) { MessageBox.Show("写入二维数组示例错误!错误原因:" + ex.Message); return false; } } /// /// 读取excel的一个范围到一个二维数组里面, 不同的数据类型 /// /// 起始位置 如"A1" /// 终止位置 如"B5" /// object[,] public object[,] GetRangeArray_Value(string _BeginPoint, string _EndPoint) { if (m_objApp == null) { return null; } if (m_objSheet == null) { return null; } this.SetApp_Exit_EditMode(); try { //得到range数组 //object[] Parameters_rangeArray = new object[] { "A1", "B5" }; object[] Parameters_rangeArray = new object[] { _BeginPoint, _EndPoint }; object m_objRangeArray = m_objSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, m_objSheet, Parameters_rangeArray); if (m_objRangeArray == null) { Console.WriteLine("出错啦: range == null,请检查range的设置。"); } //****************** object[,] m_objRangeArrayValue = (object[,])m_objRangeArray.GetType().InvokeMember("Value2", BindingFlags.GetProperty, null, m_objRangeArray, new object[0]); //object[,] m_objRangeArrayValue = (object[,])m_objRangeArray.GetType().InvokeMember("Value2", BindingFlags.Instance | BindingFlags.Public | BindingFlags.GetProperty, null, m_objRangeArray, new object[0]); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRangeArray); GC.GetTotalMemory(true); //****************** int rows = m_objRangeArrayValue.GetLength(0); //获取m_objRangeArrayValue的行数 int columns = m_objRangeArrayValue.GetLength(1); //获取m_objRangeArrayValue的列数 object[,] param = new object[rows, columns]; //转化为起始为0的数组 Array.Copy(m_objRangeArrayValue, param, rows * columns); //临时结果,学习用 //****************** return m_objRangeArrayValue; // public object[,] App_GetRangeArrayValue(string _BeginPoint, string _EndPoint) } catch (Exception ex) { MessageBox.Show("读取excel的数组错误!错误原因:" + ex.Message); return null; } } /// /// 設定值,指出文字是否會自動縮小以符合可用的栏宽? /// /// 起始位置 如"A1" /// 终止位置 如"B5" /// true=自动适应栏宽,false=不自动适应栏宽(默认= false) /// public bool SetRangeArray_ShrinkToFit(string _BeginPoint, string _EndPoint, bool _bEnabled) { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); try { //得到range数组 //object[] Parameters_rangeArray = new object[] { "A1", "B5" }; object[] Parameters_rangeArray = new object[] { _BeginPoint, _EndPoint }; object m_objRangeArray = m_objSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, m_objSheet, Parameters_rangeArray); if (m_objRangeArray == null) { Console.WriteLine("出错啦: range == null,请检查range的设置。"); } //************************ //得到写入值 Object[] ParametersArray_WriteValue = new Object[1]; ParametersArray_WriteValue[0] = _bEnabled; //赋值:数值类型=int //****************** m_objRangeArray.GetType().InvokeMember("ShrinkToFit", BindingFlags.SetProperty, null, m_objRangeArray, ParametersArray_WriteValue); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRangeArray); GC.GetTotalMemory(true); return true; } catch (Exception ex) { MessageBox.Show("写入错误!错误原因:" + ex.Message); return false; } } /// /// 設定指出 NamedRange 控制項是否為鎖定的值。? /// /// 起始位置 如"A1" /// 终止位置 如"B5" /// true=鎖定,false=不鎖定(默认= false) /// public bool SetRangeArray_Locked(string _BeginPoint, string _EndPoint, bool _bEnabled) { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); try { //得到range数组 //object[] Parameters_rangeArray = new object[] { "A1", "B5" }; object[] Parameters_rangeArray = new object[] { _BeginPoint, _EndPoint }; object m_objRangeArray = m_objSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, m_objSheet, Parameters_rangeArray); if (m_objRangeArray == null) { Console.WriteLine("出错啦: range == null,请检查range的设置。"); } //************************ //得到写入值 Object[] ParametersArray_WriteValue = new Object[1]; ParametersArray_WriteValue[0] = _bEnabled; //赋值:数值类型=int //****************** m_objRangeArray.GetType().InvokeMember("Locked", BindingFlags.SetProperty, null, m_objRangeArray, ParametersArray_WriteValue); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRangeArray); GC.GetTotalMemory(true); return true; } catch (Exception ex) { MessageBox.Show("写入错误!错误原因:" + ex.Message); return false; } } /// /// 获取 NamedRange 控制項是否為鎖定的值。? /// /// 起始位置 如"A1" /// 终止位置 如"B5" /// public bool GetRangeArray_Locked(string _BeginPoint, string _EndPoint) { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); try { //得到range数组 //object[] Parameters_rangeArray = new object[] { "A1", "B5" }; object[] Parameters_rangeArray = new object[] { _BeginPoint, _EndPoint }; object m_objRangeArray = m_objSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, m_objSheet, Parameters_rangeArray); if (m_objRangeArray == null) { Console.WriteLine("出错啦: range == null,请检查range的设置。"); } //************************ Object oLocked = m_objRangeArray.GetType().InvokeMember("Locked", BindingFlags.GetProperty, null, m_objRangeArray, null); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRangeArray); GC.GetTotalMemory(true); return (bool)oLocked; } catch (Exception ex) { MessageBox.Show("写入错误!错误原因:" + ex.Message); return false; } } /// /// 读取excel的某一固定列中几行的数据到一个二维数组里面, 不同的数据类型 /// /// excel列的名字,如"A" "B" "B" /// 该列的起始位置 /// 读取的行数 /// System.Collections.ArrayList public System.Collections.ArrayList GetRangeArray_Value_ArrayList(string x_ColumnName, int y1, int RowsCount) { string BeginPoint = x_ColumnName.ToUpper() + y1.ToString(); string EndPoint = x_ColumnName.ToUpper() + (y1 + RowsCount - 1).ToString(); object[,] ValueArray = GetRangeArray_Value(BeginPoint, EndPoint); //调用本类中的方法:App_GetRangeArrayValue System.Collections.ArrayList aa = Tools_Array2ArrayList(ValueArray); //调用/调用本类中的静态方法:Tools_Array2ArrayList return aa; } /// /// 读取excel的某一固定行中几列的数据到一个二维数组里面, 不同的数据类型 /// /// excel起始列的名字,如"A" "B" "B" /// excel终止列的名字,如"A" "B" "B" /// 读取的行的序号 /// System.Collections.ArrayList public System.Collections.ArrayList GetRangeArray_Value_ArrayList(string x_ColumnName_1, string x_ColumnName_2, int RowsNumber) { string BeginPoint = x_ColumnName_1.ToUpper() + RowsNumber.ToString(); string EndPoint = x_ColumnName_2.ToUpper() + RowsNumber.ToString(); object[,] ValueArray = GetRangeArray_Value(BeginPoint, EndPoint); //调用本类中的方法:App_GetRangeArrayValue System.Collections.ArrayList aa = Tools_Array2ArrayList(ValueArray); //调用/调用本类中的静态方法:Tools_Array2ArrayList return aa; } /// /// 读取excel的某一固定列中几行的数据到一个二维数组里面, 不同的数据类型 转化为string[] /// /// excel列的名字,如"A" "B" "B" /// 该列的起始位置 /// 读取的行数 /// string[] public string[] GetRangeArray_Value_string(string x_ColumnName, int y1, int RowsCount) { string BeginPoint = x_ColumnName.ToUpper() + y1.ToString(); string EndPoint = x_ColumnName.ToUpper() + (y1 + RowsCount - 1).ToString(); object[,] ValueArray = GetRangeArray_Value(BeginPoint, EndPoint); //调用本类中的方法:App_GetRangeArrayValue string[] cc = Tools_ConvertToStringArray(ValueArray); return cc; } /// /// 读取excel的某一固定行中几列的数据到一个二维数组里面, 不同的数据类型 转化为string[] /// /// excel起始列的名字,如"A" "B" "B" /// excel终止列的名字,如"A" "B" "B" /// 读取的行的序号 /// string[] public string[] GetRangeArray_Value_string(string x_ColumnName_1, string x_ColumnName_2, int RowsNumber) { string BeginPoint = x_ColumnName_1.ToUpper() + RowsNumber.ToString(); string EndPoint = x_ColumnName_2.ToUpper() + RowsNumber.ToString(); object[,] ValueArray = GetRangeArray_Value(BeginPoint, EndPoint); //调用本类中的方法:App_GetRangeArrayValue //System.Collections.ArrayList aa = Tools_Array2ArrayList(ValueArray); //调用/调用本类中的静态方法:Tools_Array2ArrayList //object[] bb = Tools_ArrayList2Array(aa); string[] cc = Tools_ConvertToStringArray(ValueArray); return cc; } /// /// 将object[,]转换为ArrayList /// /// /// public static System.Collections.ArrayList Tools_Array2ArrayList(object[,] _object_Array_Value) { System.Collections.ArrayList myArrayList = new System.Collections.ArrayList(); System.Collections.IEnumerator se = _object_Array_Value.GetEnumerator(); while (se.MoveNext()) { myArrayList.Add(se.Current); } return myArrayList; //System.Collections.ArrayList ParaColumns = new System.Collections.ArrayList(); // ParaColumns.Add("ID|Int16"); // // ParaColumns.Add("日期|DateTime"); // System.DateTime // ParaColumns.Add("工资|Decimal"); //System.Decimal } /// /// 将ArrayList转换为 object[,] /// /// /// public static object[] Tools_ArrayList2Array(System.Collections.ArrayList _ArrayList) { object[] ValueArray = _ArrayList.ToArray(); return ValueArray; } /// /// object[,]转化成为string[] /// /// /// private static string[] Tools_ConvertToStringArray(object[,] values) { string[] newArray = new string[values.Length]; int index = 0; for (int i = values.GetLowerBound(0); i <= values.GetUpperBound(0); i++) { for (int j = values.GetLowerBound(1); j <= values.GetUpperBound(1); j++) { if (values.GetValue(i, j) == null) { newArray[index] = ""; } else { newArray[index] = (string)values.GetValue(i, j).ToString(); } index++; } } return newArray; } // /// /// 判断字符是否 /// /// /// public static bool Tools_IsNumeric(string anyString) { if (anyString == null) { anyString = ""; } if (anyString.Length > 0) { double dummyOut = new double(); System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("en-US", true); return Double.TryParse(anyString, System.Globalization.NumberStyles.Any, cultureInfo.NumberFormat, out dummyOut); } else { return false; } } /// /// 设置Columns的属性:列最适应宽度 /// /// Columns的属性名字 /// Columns的属性设置值 /// 起始位置 如"A1" /// 终止位置 如"B5" /// internal bool SetRangeArray_RangeProperty_Columns(string _strColumnsPropertyName, object[] _Parameters_Set, string _BeginPoint, string _EndPoint) { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); //******************** //得到range数组 //object[] Parameters_rangeArray = new object[] { "A1", "B5" }; object[] Parameters_rangeArray = new object[] { _BeginPoint, _EndPoint }; object m_objRangeArray = m_objSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, m_objSheet, Parameters_rangeArray); if (m_objRangeArray == null) { Console.WriteLine("出错啦: m_objRangeArray == null,请检查range的设置。"); } //Columns object m_objRangeColumns = m_objRangeArray.GetType().InvokeMember("Columns", BindingFlags.GetProperty, null, m_objRangeArray, null); if (m_objRangeColumns == null) { Console.WriteLine("出错啦: m_objRangeColumns == null,请检查range的设置。"); } //******************** try { m_objRangeColumns.GetType().InvokeMember(_strColumnsPropertyName, BindingFlags.InvokeMethod, null, m_objRangeColumns, _Parameters_Set); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRangeColumns); GC.GetTotalMemory(true); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRangeArray); GC.GetTotalMemory(true); return true; } catch (Exception ex) { MessageBox.Show("错误!错误原因:" + ex.Message); return false; } } /// /// 列最适应宽度 /// /// 起始位置 如"A1" /// 终止位置 如"B5" /// public void SetRangeArray_RangeProperty_Columns_AutoFit(string _BeginPoint, string _EndPoint) { if (m_objSheet == null) { return; } this.SetRangeArray_RangeProperty_Columns("AutoFit", null, _BeginPoint, _EndPoint); } /// /// 设置Rows的属性:行最适应高度 /// /// Rows的属性名字 /// Rows的属性设置值 /// 起始位置 如"A1" /// 终止位置 如"B5" /// internal bool SetRangeArray_RangeProperty_Rows(string _strColumnsPropertyName, object[] _Parameters_Set, string _BeginPoint, string _EndPoint) { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); //******************** //得到range数组 //object[] Parameters_rangeArray = new object[] { "A1", "B5" }; object[] Parameters_rangeArray = new object[] { _BeginPoint, _EndPoint }; object m_objRangeArray = m_objSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, m_objSheet, Parameters_rangeArray); if (m_objRangeArray == null) { Console.WriteLine("出错啦: m_objRangeArray == null,请检查range的设置。"); } //Columns object m_objRangeRows = m_objRangeArray.GetType().InvokeMember("Rows", BindingFlags.GetProperty, null, m_objRangeArray, null); if (m_objRangeRows == null) { Console.WriteLine("出错啦: m_objRangeColumns == null,请检查range的设置。"); } //******************** try { m_objRangeRows.GetType().InvokeMember(_strColumnsPropertyName, BindingFlags.InvokeMethod, null, m_objRangeRows, _Parameters_Set); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRangeRows); GC.GetTotalMemory(true); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRangeArray); GC.GetTotalMemory(true); return true; } catch (Exception ex) { MessageBox.Show("错误!错误原因:" + ex.Message); return false; } } /// /// 行最适应高度 /// /// 起始位置 如"A1" /// 终止位置 如"B5" /// public void SetRangeArray_RangeProperty_Rows_AutoFit(string _BeginPoint, string _EndPoint) { if (m_objSheet == null) { return; } this.SetRangeArray_RangeProperty_Rows("AutoFit", null, _BeginPoint, _EndPoint); } /// /// 内部调用: 设置RangeArray属性 /// /// 设置RangeArray属性的名字 /// 设置RangeArray属性的参数值 /// 起始位置 如"A1" /// 终止位置 如"B5" /// internal bool SetRangeArray_Property(string _strRangePropertyName, object[] _Parameters_Set, string _BeginPoint, string _EndPoint) { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); //******************** //得到range数组 //object[] Parameters_rangeArray = new object[] { "A1", "B5" }; object[] Parameters_rangeArray = new object[] { _BeginPoint, _EndPoint }; object m_objRangeArrayProperty = m_objSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, m_objSheet, Parameters_rangeArray); if (m_objRangeArrayProperty == null) { Console.WriteLine("出错啦: range == null,请检查range的设置。"); } //******************** try { m_objRangeArrayProperty.GetType().InvokeMember(_strRangePropertyName, BindingFlags.SetProperty, null, m_objRangeArrayProperty, _Parameters_Set); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRangeArrayProperty); GC.GetTotalMemory(true); return true; } catch (Exception ex) { System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRangeArrayProperty); GC.GetTotalMemory(true); MessageBox.Show("错误!错误原因:" + ex.Message); return false; } } /// /// 设置水平居中的参数 :2=靠左; 3=居中; 4=靠右 /// /// 起始位置 如"A1" /// 终止位置 如"B5" /// 水平居中的参数 :2=靠左; 3=居中; 4=靠右 public void SetRangeArray_RangeProperty_HorizontalAlignment(string _BeginPoint, string _EndPoint, int _nHorizontalAlignment) { if (m_objSheet == null) { return; } //水平参数:2=靠左; 3=居中; 4=靠右 object[] Parameters_Set = new Object[1] { _nHorizontalAlignment }; //HorizontalAlignment this.SetRangeArray_Property("HorizontalAlignment", Parameters_Set, _BeginPoint, _EndPoint); } /// /// 设置垂直居中的参数 :1=靠上 ;2=居中; 3=靠下; /// /// 起始位置 如"A1" /// 终止位置 如"B5" /// 垂直居中的参数 :1=靠上 ;2=居中; 3=靠下 public void SetRangeArray_RangeProperty_VerticalAlignment(string _BeginPoint, string _EndPoint, int _nVerticalAlignment) { if (m_objSheet == null) { return; } //垂直参数:1=靠上 ;2=居中; 3=靠下; object[] Parameters_Set = new Object[1] { _nVerticalAlignment }; //HorizontalAlignment this.SetRangeArray_Property("HorizontalAlignment", Parameters_Set, _BeginPoint, _EndPoint); } /// /// 设置自动换行,或禁止 /// /// 起始位置 如"A1" /// 终止位置 如"B5" /// 自动换行=true ,禁止 =false public void SetRangeArray_RangeProperty_WrapText(string _BeginPoint, string _EndPoint, bool _bWrap) { if (m_objSheet == null) { return; } object[] Parameters_Set = new Object[1] { _bWrap }; // this.SetRangeArray_Property("WrapText", Parameters_Set, _BeginPoint, _EndPoint); } /// /// 设置边框的线形 /// type:1=左边界;2=右边界;3=上边界;4=下边界;5=左上倾斜;6=右上倾斜(以上为对单元格的操作) /// type:7=左边界;8=上边界;9=下边界;10=右边界;11=内部垂直边界;12=内部水平边界(以上为对区域的操作) /// /// 起始位置 如"A1" /// 终止位置 如"B5" /// //type:1=左边界;2=右边界;3=上边界;4=下边界;5=左上倾斜;6=右上倾斜(以上为对单元格的操作) 7=左边界;8=上边界;9=下边界;10=右边界;11=内部垂直边界;12=内部水平边界(以上为对区域的操作) /// __nlinestyleValue:0 =无 1=细实(7=细实)、2=细虚、4=点虚、9=双细实线 /// public bool SetRangeArray_Borders_linestyle(string _BeginPoint, string _EndPoint, int _nBordersType, int _nlinestyleValue) { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); //_nBordersType: 1=左边界;2=右边界;3=上边界;4=下边界;5=左上倾斜;6=右上倾斜(以上为对单元格的操作) // 7=左边界;8=上边界;9=下边界;10=右边界;11=内部垂直边界;12=内部水平边界(以上为对区域的操作) //_nlinestyleValue:0 =无 1=细实(7=细实)、2=细虚、4=点虚、9=双细实线 //public enum XlLineStyle //{ // xlLineStyleNone = -4142, // xlDouble = -4119, // xlDot = -4118, // xlDash = -4115, // xlContinuous = 1, // xlDashDot = 4, // xlDashDotDot = 5, // xlSlantDashDot = 13, //} //******************** //得到range数组 //object[] Parameters_rangeArray = new object[] { "A1", "B5" }; object[] Parameters_rangeArray = new object[] { _BeginPoint, _EndPoint }; object m_objRangeArray = m_objSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, m_objSheet, Parameters_rangeArray); if (m_objRangeArray == null) { Console.WriteLine("出错啦: m_objRangeArray == null,请检查range的设置。"); } object[] Parameters_BordersType = new Object[1] { _nBordersType }; object m_objRangeArrayBorders = m_objRangeArray.GetType().InvokeMember("Borders", BindingFlags.GetProperty, null, m_objRangeArray, Parameters_BordersType); if (m_objRangeArrayBorders == null) { Console.WriteLine("出错啦: m_objRangeArrayProperty == null,请检查range的设置。"); } //******************** try { object[] Parameters_BordersValue = new Object[1] { _nlinestyleValue }; m_objRangeArrayBorders.GetType().InvokeMember("linestyle", BindingFlags.SetProperty, null, m_objRangeArrayBorders, Parameters_BordersValue); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRangeArrayBorders); //一定要注释,否则出错 GC.GetTotalMemory(true); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRangeArray); GC.GetTotalMemory(true); return true; } catch (Exception ex) { System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRangeArrayBorders); //一定要注释,否则出错 GC.GetTotalMemory(true); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRangeArray); GC.GetTotalMemory(true); MessageBox.Show("错误!错误原因:" + ex.Message); return false; } } /// /// 设置区域内单元格四周边的边框的边界线 /// /// 起始位置 如"A1" /// 终止位置 如"B5" /// linestyleValue:0 =无 1=细实(7=细实)、2=细虚、4=点虚、9=双细实线 public void SetCell_Borders_All_linestyle(string _BeginPoint, string _EndPoint, int _nlinestyleValue) { if (m_objSheet == null) { return; } this.SetRangeArray_Borders_linestyle(_BeginPoint, _EndPoint, 1, _nlinestyleValue); //左边界 this.SetRangeArray_Borders_linestyle(_BeginPoint, _EndPoint, 2, _nlinestyleValue); //右边界 this.SetRangeArray_Borders_linestyle(_BeginPoint, _EndPoint, 3, _nlinestyleValue); //上边界 this.SetRangeArray_Borders_linestyle(_BeginPoint, _EndPoint, 4, _nlinestyleValue); //下边界 this.SetRangeArray_Borders_linestyle(_BeginPoint, _EndPoint, 7, _nlinestyleValue); //左边界 this.SetRangeArray_Borders_linestyle(_BeginPoint, _EndPoint, 8, _nlinestyleValue); //右边界 this.SetRangeArray_Borders_linestyle(_BeginPoint, _EndPoint, 9, _nlinestyleValue); //上边界 this.SetRangeArray_Borders_linestyle(_BeginPoint, _EndPoint, 10, _nlinestyleValue); //下边界 } /// /// 设置边框的边界线的厚度 /// type:1=左边界;2=右边界;3=上边界;4=下边界;5=左上倾斜;6=右上倾斜(以上为对单元格的操作) /// type:7=左边界;8=上边界;9=下边界;10=右边界;11=内部垂直边界;12=内部水平边界(以上为对区域的操作) /// /// 起始位置 如"A1" /// 终止位置 如"B5" /// type:1=左边界;2=右边界;3=上边界;4=下边界;5=左上倾斜;6=右上倾斜(以上为对单元格的操作) 7=左边界;8=上边界;9=下边界;10=右边界;11=内部垂直边界;12=内部水平边界(以上为对区域的操作) /// val:0无边界线;然后1、2、3、4依次边界线加粗 /// public bool SetRangeArray_Borders_Weight(string _BeginPoint, string _EndPoint, int _nBordersType, int _nBordersValue) { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); //_nBordersType: 1=左边界;2=右边界;3=上边界;4=下边界;5=左上倾斜;6=右上倾斜(以上为对单元格的操作) // 7=左边界;8=上边界;9=下边界;10=右边界;11=内部垂直边界;12=内部水平边界(以上为对区域的操作) //_nBordersValue:0无边界线;然后1、2、3、4依次边界线加粗 //public enum XlBorderWeight //{ // xlMedium = -4138, // xlHairline = 1, // xlThin = 2, // xlThick = 4, //} //******************** //得到range数组 //object[] Parameters_rangeArray = new object[] { "A1", "B5" }; object[] Parameters_rangeArray = new object[] { _BeginPoint, _EndPoint }; object m_objRangeArray = m_objSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, m_objSheet, Parameters_rangeArray); if (m_objRangeArray == null) { Console.WriteLine("出错啦: m_objRangeArray == null,请检查range的设置。"); } object[] Parameters_BordersType = new Object[1] { _nBordersType }; object m_objRangeArrayBorders = m_objRangeArray.GetType().InvokeMember("Borders", BindingFlags.GetProperty, null, m_objRangeArray, Parameters_BordersType); if (m_objRangeArrayBorders == null) { Console.WriteLine("出错啦: m_objRangeArrayBorders == null,请检查range的设置。"); } //******************** try { object[] Parameters_BordersValue = new Object[1] { _nBordersValue }; m_objRangeArrayBorders.GetType().InvokeMember("Weight", BindingFlags.SetProperty, null, m_objRangeArrayBorders, Parameters_BordersValue); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRangeArrayBorders); //一定要注释,否则出错 GC.GetTotalMemory(true); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRangeArray); GC.GetTotalMemory(true); return true; } catch (Exception ex) { System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRangeArrayBorders); //一定要注释,否则出错 GC.GetTotalMemory(true); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRangeArray); GC.GetTotalMemory(true); MessageBox.Show("错误!错误原因:" + ex.Message); return false; } } /// /// 设置区域内单元格四周边的边框的边界线的厚度 /// /// 起始位置 如"A1" /// 终止位置 如"B5" /// val:0无边界线;然后1、2、3、4依次边界线加粗 public void SetCell_Borders_All_Weight(string _BeginPoint, string _EndPoint, int _nBordersValue) { if (m_objSheet == null) { return; } this.SetRangeArray_Borders_Weight(_BeginPoint, _EndPoint, 1, _nBordersValue); //左边界 this.SetRangeArray_Borders_Weight(_BeginPoint, _EndPoint, 2, _nBordersValue); //右边界 this.SetRangeArray_Borders_Weight(_BeginPoint, _EndPoint, 3, _nBordersValue); //上边界 this.SetRangeArray_Borders_Weight(_BeginPoint, _EndPoint, 4, _nBordersValue); //下边界 this.SetRangeArray_Borders_Weight(_BeginPoint, _EndPoint, 7, _nBordersValue); //左边界 this.SetRangeArray_Borders_Weight(_BeginPoint, _EndPoint, 8, _nBordersValue); //右边界 this.SetRangeArray_Borders_Weight(_BeginPoint, _EndPoint, 9, _nBordersValue); //上边界 this.SetRangeArray_Borders_Weight(_BeginPoint, _EndPoint, 10, _nBordersValue); //下边界 } /// /// 内部调用,设置字体的属性 /// /// 字体属性的名字 /// 字体属性的值 /// 起始位置 如"A1" /// 终止位置 如"B5" /// internal bool SetRangeArray_Font(string _strFontPropertyName, object[] _Parameters_Set, string _BeginPoint, string _EndPoint) { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); //******************** //得到range数组 //object[] Parameters_rangeArray = new object[] { "A1", "B5" }; object[] Parameters_rangeArray = new object[] { _BeginPoint, _EndPoint }; object m_objRangeArray = m_objSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, m_objSheet, Parameters_rangeArray); object m_objRangeArrayFont = m_objRangeArray.GetType().InvokeMember("Font", BindingFlags.GetProperty, null, m_objRangeArray, null); if (m_objRangeArray == null) { Console.WriteLine("出错啦: range == null,请检查range的设置。"); } //******************** try { m_objRangeArrayFont.GetType().InvokeMember(_strFontPropertyName, BindingFlags.SetProperty, null, m_objRangeArrayFont, _Parameters_Set); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRangeArrayFont); //一定要注释,否则出错 GC.GetTotalMemory(true); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRangeArray); GC.GetTotalMemory(true); return true; } catch (Exception ex) { System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRangeArrayFont); //一定要注释,否则出错 GC.GetTotalMemory(true); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRangeArray); GC.GetTotalMemory(true); MessageBox.Show("错误!错误原因:" + ex.Message); return false; } } /// /// 设置前景色 /// /// 起始位置 如"A1" /// 终止位置 如"B5" /// 1 =黑色 2 =白色 3 =红色 4 =绿 5 =蓝色 6 =黄色 7=紫红色 /// public void SetRangeArray_FontProperty_ColorIndex(string _BeginPoint, string _EndPoint, int _nColor) { //1 =黑色 2 =白色 3 =红色 4 =绿 5 =蓝色 6 =黄色 7=紫红色 object[] Parameters_Set = new Object[1] { _nColor }; this.SetRangeArray_Font("ColorIndex", Parameters_Set, _BeginPoint, _EndPoint); } /// /// 设置字号大小 /// /// 起始位置 如"A1" /// 终止位置 如"B5" /// 字号,如12;14;18;32;48 public void SetRangeArray_FontProperty_Size(string _BeginPoint, string _EndPoint, int _nSize) { object[] Parameters_Set = new Object[1] { _nSize }; this.SetRangeArray_Font("Size", Parameters_Set, _BeginPoint, _EndPoint); } /// /// 设置字体 /// /// 起始位置 如"A1" /// 终止位置 如"B5" /// 字体的名字,如 "宋体" public void SetRangeArray_FontProperty_Name(string _BeginPoint, string _EndPoint, string _strName) { object[] Parameters_Set = new Object[1] { _strName }; this.SetRangeArray_Font("Name", Parameters_Set, _BeginPoint, _EndPoint); } /// /// 设置是否黑体 /// /// 起始位置 如"A1" /// 终止位置 如"B5" /// 是否黑体 true = 黑体 public void SetRangeArray_FontProperty_Bold(string _BeginPoint, string _EndPoint, bool _bBold) { object[] Parameters_Set = new Object[1] { _bBold }; this.SetRangeArray_Font("Bold", Parameters_Set, _BeginPoint, _EndPoint); } /// /// 设置是否下划线 /// /// 起始位置 如"A1" /// 终止位置 如"B5" /// 是否下划线 true = 加下划线 public void SetRangeArray_FontProperty_Underline(string _BeginPoint, string _EndPoint, bool _bUnderline) { object[] Parameters_Set = new Object[1] { _bUnderline }; this.SetRangeArray_Font("Underline", Parameters_Set, _BeginPoint, _EndPoint); } /// /// 设置是否斜体 /// /// 起始位置 如"A1" /// 终止位置 如"B5" /// 是否斜体 true = 斜体 public void SetRangeArray_FontProperty_Italic(string _BeginPoint, string _EndPoint, bool _bItalic) { object[] Parameters_Set = new Object[1] { _bItalic }; this.SetRangeArray_Font("Italic", Parameters_Set, _BeginPoint, _EndPoint); } /// /// 设置属性举例,设置成为 斜体 下划线 黑体 隶书 字号 =18 前景色 =红色 背景色= 黄色 /// public void SetRangeArray_FontProperty_EG() // { this.SetRangeArray_FontProperty_Bold("A1", "E8", true); this.SetRangeArray_FontProperty_ColorIndex("A1", "E8", 3); //前景色 =红色 this.SetRangeArray_FontProperty_Italic("A1", "E8", true); this.SetRangeArray_FontProperty_Name("A1", "E8", "隶书"); this.SetRangeArray_FontProperty_Size("A1", "E8", 72); this.SetRangeArray_FontProperty_Underline("A1", "E8", true); this.SetRangeArray_Property_BackGroundColor("A1", "E8", 7); } /// /// 设置背景色 /// /// 起始位置 如"A1" /// 终止位置 如"B5" /// 1 =黑色 2 =白色 3 =红色 4 =绿 5 =蓝色 6 =黄色 7=紫红色 /// public bool SetRangeArray_Property_BackGroundColor(string _BeginPoint, string _EndPoint, int _nColor) // { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); //******************** //得到range数组 //object[] Parameters_rangeArray = new object[] { "A1", "B5" }; object[] Parameters_rangeArray = new object[] { _BeginPoint, _EndPoint }; object m_objRangeArray = m_objSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, m_objSheet, Parameters_rangeArray); object m_objRangeArrayFont = m_objRangeArray.GetType().InvokeMember("Interior", BindingFlags.GetProperty, null, m_objRangeArray, null); if (m_objRangeArray == null) { Console.WriteLine("出错啦: range == null,请检查range的设置。"); } //******************** try { //***************************** //objRange1.Interior.ColorIndex = "5"; //背景色:5=蓝色 //*************************************************** object[] Parameters_Set = new Object[1] { _nColor }; m_objApp.GetType().InvokeMember("ColorIndex", BindingFlags.SetProperty, null, m_objRangeArrayFont, Parameters_Set); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRangeArrayFont); //一定要注释,否则出错 GC.GetTotalMemory(true); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRangeArray); GC.GetTotalMemory(true); return true; } catch (Exception ex) { System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRangeArrayFont); //一定要注释,否则出错 GC.GetTotalMemory(true); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRangeArray); GC.GetTotalMemory(true); MessageBox.Show("错误!错误原因:" + ex.Message); return false; } } /// /// 得到有效行个数 /// /// public int GetRange_UsedRangeRowsCount() { if (m_objApp == null) { return 0; } if (m_objSheet == null) { return 0; } this.SetApp_Exit_EditMode(); try { object m_objUsedRange = m_objSheet.GetType().InvokeMember("UsedRange", BindingFlags.GetProperty, null, m_objSheet, null); if (m_objUsedRange == null) { Console.WriteLine("出错啦: UsedRange == null。"); } object m_objUsedRangeRows = m_objUsedRange.GetType().InvokeMember("Rows", BindingFlags.GetProperty, null, m_objUsedRange, null); int UsedRangeRowsCount = (int)m_objUsedRangeRows.GetType().InvokeMember("Count", BindingFlags.GetProperty, null, m_objUsedRangeRows, null); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objUsedRangeRows); //一定要注释,否则出错 GC.GetTotalMemory(true); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objUsedRange); GC.GetTotalMemory(true); return UsedRangeRowsCount; } catch (Exception ex) { GC.GetTotalMemory(true); MessageBox.Show("读取GetRange_UsedRangeRowsCount错误!错误原因:" + ex.Message); return 0; } } /// /// 得到有效列的个数 /// /// public int GetRange_UsedRangeColumnsCount() { if (m_objApp == null) { return 0; } if (m_objSheet == null) { return 0; } this.SetApp_Exit_EditMode(); try { object m_objUsedRange = m_objSheet.GetType().InvokeMember("UsedRange", BindingFlags.GetProperty, null, m_objSheet, null); if (m_objUsedRange == null) { Console.WriteLine("出错啦: UsedRange == null。"); } object m_objUsedRangeColumns = m_objUsedRange.GetType().InvokeMember("Columns", BindingFlags.GetProperty, null, m_objUsedRange, null); int UsedRangeColumnsCount = (int)m_objUsedRangeColumns.GetType().InvokeMember("Count", BindingFlags.GetProperty, null, m_objUsedRangeColumns, null); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objUsedRangeColumns); //一定要注释,否则出错 GC.GetTotalMemory(true); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objUsedRange); GC.GetTotalMemory(true); return UsedRangeColumnsCount; } catch (Exception ex) { MessageBox.Show("读取GetRange_UsedRangeColumnsCount错误!错误原因:" + ex.Message); return 0; } } /// /// 得到已经使用的区域 /// /// public string GetRange_UsedRange() { //System.Collections.ArrayList alUsedRange = new System.Collections.ArrayList(); string strUsedRange; try { int nUsedRangeColumnsCount = this.GetRange_UsedRangeColumnsCount(); int nUsedRangeRowsCount = this.GetRange_UsedRangeRowsCount(); strUsedRange = SuperTools.UC_EmbedExcelIntoWinFormNoDLL.Tool_NtoL(nUsedRangeColumnsCount) + nUsedRangeRowsCount.ToString(); return strUsedRange; } catch (Exception ex) { MessageBox.Show("读取GetRange_UsedRange错误!错误原因:" + ex.Message); return null; } } /// /// 设置整个使用区域,全部自动最适应列框 /// /// public void SetRange_UsedRange_AutoFit() { string ss = this.GetRange_UsedRange(); this.SetRangeArray_RangeProperty_Columns_AutoFit("A1", ss); this.SetRangeArray_RangeProperty_Rows_AutoFit("A1", ss); } /// /// 设置单元格的格式 ,如:"#,##0.00_" = 数字格式 /// /// 起始位置 如"A1" /// 终止位置 如"B5" /// /// public bool SetRangeArray_FormatStyle(string _BeginPoint, string _EndPoint, string _strFormatStyle) { if (m_objApp == null) { return false; } if (m_objSheet == null) { return false; } this.SetApp_Exit_EditMode(); try { //得到range数组 //object[] Parameters_rangeArray = new object[] { "C1", "C5" }; object[] Parameters_rangeArray = new object[] { _BeginPoint, _EndPoint }; object m_objRangeArray = m_objSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, m_objSheet, Parameters_rangeArray); if (m_objRangeArray == null) { Console.WriteLine("出错啦: range == null,请检查range的设置。"); } //得到写入值 Object[] ParametersArray_WriteValue = new Object[1]; ParametersArray_WriteValue[0] = _strFormatStyle; //赋值 //****************** m_objRangeArray.GetType().InvokeMember("NumberFormat", BindingFlags.SetProperty, null, m_objRangeArray, ParametersArray_WriteValue); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRangeArray); GC.GetTotalMemory(true); return true; } catch (Exception ex) { MessageBox.Show("设置数字格式错误!错误原因:" + ex.Message); return false; } //G/通用格式 //"#,##0.00_ " } /// /// 获取单元格的格式 /// /// 起始位置 如"A1" /// 终止位置 如"B5" /// public string GetRangeArray_FormatStyle(string _BeginPoint, string _EndPoint) { if (m_objApp == null) { return String.Empty; } if (m_objSheet == null) { return String.Empty; } this.SetApp_Exit_EditMode(); try { //得到range数组 //object[] Parameters_rangeArray = new object[] { "C1", "C5" }; object[] Parameters_rangeArray = new object[] { _BeginPoint, _EndPoint }; object m_objRangeArray = m_objSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, m_objSheet, Parameters_rangeArray); if (m_objRangeArray == null) { Console.WriteLine("出错啦: range == null,请检查range的设置。"); } //NumberFormatLocal //NumberFormat string strColumn_NumberFormatLocal = (string)m_objRangeArray.GetType().InvokeMember("NumberFormat", BindingFlags.GetProperty, null, m_objRangeArray, null); System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objRangeArray); GC.GetTotalMemory(true); return strColumn_NumberFormatLocal; // } catch (Exception ex) { MessageBox.Show("获取单元格的格式GetRangeArray_FormatStyle错误!错误原因:" + ex.Message); return null; } //G/通用格式 //"#,##0.00_ " } #region 学习用 /* //根据DataTable的字段的数据类型来设置excel列的数据格式 DataTable table = new DataTable(); int i = 0; foreach (DataColumn column in table.Columns) { i++; // Insert fieldname object range = m_objSheet.GetType().InvokeMember("Cells", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, m_objSheet, new object[2] { 1, i }); if (range == null) { Console.WriteLine("出错啦: range == null,请检查range的设置。"); } range.GetType().InvokeMember("Value", BindingFlags.SetProperty | BindingFlags.OptionalParamBinding, null, range, new object[1] { column.ColumnName }); object[] format = null; if (column.DataType.Equals(typeof(double))) { string s = "0" + System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator; for (int digits = 0; digits < System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalDigits; digits++) { s += "0"; } format = new object[] { s.ToString() }; } else if (column.DataType.Equals(typeof(int))) { format = new object[] { "0" }; } else if (column.DataType.Equals(typeof(Int16))) { format = new object[] { "0" }; } else if (column.DataType.Equals(typeof(DateTime))) { format = new object[] { "TT.MM.JJJJ HH:mm:ss" }; } else if (column.DataType.Equals(typeof(string))) { format = new object[] { "" }; } //Excel.Range oRange = (Excel.Range)ws.Columns[SpaltenNummer, Type.Missing]; range = m_objSheet.GetType().InvokeMember("Columns", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, m_objSheet, new object[2] { i, Type.Missing }); //range = sheet.GetType().InvokeMember("Cells", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { 2, i }); //range.GetType().InvokeMember("EntireColumn", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, range, new object[0]).GetType().InvokeMember("NumberFormat", BindingFlags.SetProperty | BindingFlags.OptionalParamBinding, null, range, format); range.GetType().InvokeMember("NumberFormat", BindingFlags.SetProperty | BindingFlags.OptionalParamBinding, null, range, format); } */ #endregion #region 字母转换为数字 数字转换为字母 /// /// 字母转换为数字,Excel列头,如A-1;AA-27 /// /// 字母 /// 字母对应的数字 public static int Tool_LtoN(string strLetter) { int intRtn = 0; string strLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; if (strLetter.Length == 2) intRtn += (strLetters.IndexOf(strLetter.Substring(0, 1)) + 1) * 26; intRtn += strLetters.IndexOf(strLetter.Substring(strLetter.Length - 1, 1)) + 1; return intRtn; } /// /// 数字转换为字母,Excel列头,如1-A;27-AA /// /// 数字 /// 数字对应的字母 public static string Tool_NtoL(int intNumber) { if (intNumber > 702) return String.Empty; if (intNumber == 702) return "ZZ"; string strRtn = String.Empty; string strLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; if (intNumber == 26) { strRtn = "Z"; } else { if (intNumber > 26) strRtn = strLetters.Substring(intNumber / 26 - 1, 1); strRtn += strLetters.Substring((intNumber % 26) - 1, 1); } return strRtn; } #endregion 辅助函数 #region 从excel文件得到GetDataTable /// /// 读取excel打开的文件,如xls、xml、csv等文件的内容,写入到DataTable中 /// /// public DataTable Tools_GetDataTableFromExcelSheet() { object[] m_Parameters; System.Data.DataTable _Table = new System.Data.DataTable(); #region 读取第一行内容作为写入字段名 //******************************************************************************** System.Collections.ArrayList ParaColumns = new System.Collections.ArrayList(); int ColumnNumber = 1; while (true) //读取第一行内容作为写入字段名 { m_Parameters = new object[2] { 1, ColumnNumber }; ; //第一行是字段名 object m_objCells = m_objSheet.GetType().InvokeMember("Cells", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, m_objSheet, m_Parameters); object m_objCellsValue = m_objCells.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, m_objCells, new object[0]); if (m_objCellsValue == null) //有空则退出,不再继续管后面的列 { break; } else { ColumnNumber++; string strTemp = m_objCellsValue.ToString(); ParaColumns.Add(strTemp + "|String"); //System.String } System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objCells); GC.GetTotalMemory(true); } SuperTools.DataTableTools.Add_Columns(ref _Table, ParaColumns); //增加列 //******************************************************************************** #endregion #region 读取excel的数据项 //******************************************************************************** int RowNumber = 1; //增加行 while (true) //读取除第一行以外的内容 { object[] ColumnValue = new object[_Table.Columns.Count]; //定义该行的各列 for (int j = 0; j < _Table.Columns.Count; j++) { m_Parameters = new object[2] { RowNumber + 1, j + 1 }; //第i行,第j列 object m_objCells = m_objSheet.GetType().InvokeMember("Cells", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, m_objSheet, m_Parameters); object m_objCellsValue = m_objCells.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, m_objCells, new object[0]); //读值 //m_objCells.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, m_objCells, Parameters); //写值 //if (m_objCellsValue == null || m_objCellsValue.ToString().Trim() == String.Empty) if (m_objCellsValue != null) { ColumnValue[j] = m_objCellsValue.ToString(); } System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objCells); GC.GetTotalMemory(true); } if (ColumnValue[0] == null) //第1列的该行为,空,则不再增加新行 { break; } else { _Table.Rows.Add(ColumnValue);  //增加该行 RowNumber++; //下一行 } } //******************************************************************************** #endregion return _Table; } #endregion #endregion #region 保存、退出 /// /// excel保存的文件格式 /// public enum XlFileFormat { #region 枚举excel文件的格式 /// /// /// xlCurrentPlatformText = -4158, /// /// /// xlWorkbookNormal = -4143, /// /// /// xlSYLK = 2, /// /// /// xlWKS = 4, /// /// /// xlWK1 = 5, /// /// /// xlCSV = 6, /// /// /// xlDBF2 = 7, /// /// /// xlDBF3 = 8, /// /// /// xlDIF = 9, /// /// /// xlDBF4 = 11, /// /// /// xlWJ2WD1 = 14, /// /// /// xlWK3 = 15, /// /// /// xlExcel2 = 16, /// /// /// xlTemplate = 17, /// /// /// xlAddIn = 18, /// /// /// xlTextMac = 19, /// /// /// xlTextWindows = 20, /// /// /// xlTextMSDOS = 21, /// /// /// xlCSVMac = 22, /// /// /// xlCSVWindows = 23, /// /// /// xlCSVMSDOS = 24, /// /// /// xlIntlMacro = 25, /// /// /// xlIntlAddIn = 26, /// /// /// xlExcel2FarEast = 27, /// /// /// xlWorks2FarEast = 28, /// /// /// xlExcel3 = 29, /// /// /// xlWK1FMT = 30, /// /// /// xlWK1ALL = 31, /// /// /// xlWK3FM3 = 32, /// /// /// xlExcel4 = 33, /// /// /// xlWQ1 = 34, /// /// /// xlExcel4Workbook = 35, /// /// /// xlTextPrinter = 36, /// /// /// xlWK4 = 38, /// /// /// xlExcel7 = 39, /// /// /// xlExcel5 = 39, /// /// /// xlWJ3 = 40, /// /// /// xlWJ3FJ3 = 41, /// /// /// xlUnicodeText = 42, /// /// /// xlExcel9795 = 43, /// /// /// xlHtml = 44, /// /// /// xlWebArchive = 45, /// /// /// xlXMLSpreadsheet = 46, #endregion } /// /// 文件保存 /// /// public bool AppExcel_Save() { if (m_objApp == null) { return false; } if (m_objBook == null) { return false; } SetApp_Exit_EditMode(); //退出编辑模式 try { //m_objApp.GetType().InvokeMember("Save", BindingFlags.InvokeMethod, null, m_objApp, null); //ok m_objBook.GetType().InvokeMember("Save", BindingFlags.InvokeMethod, null, m_objBook, null); //ok //m_objSheet.GetType().InvokeMember("Save", BindingFlags.InvokeMethod, null, m_objSheet, null);//不能通过,必须SaveAs return true; } catch (Exception ex) { string strErr = "Excel.Application保存时出错!出错原因:" + ex.Message; System.Windows.Forms.MessageBox.Show(strErr); return true; } } /// /// Excel保存 /// /// m_strFileName可以选择= null 或者 = "" public bool AppExcel_SaveAs(string m_strFileName) { if (m_objApp == null) { return false; } if (m_objBook == null) { return false; } SetApp_Exit_EditMode(); //退出编辑模式 try { //不提示保存 try { object[] m_Parameters_DisplayAlerts = new Object[1] { false }; m_objApp.GetType().InvokeMember("DisplayAlerts", BindingFlags.SetProperty, null, m_objApp, m_Parameters_DisplayAlerts); } catch { } if (m_strFileName == null || m_strFileName == "") { //不改名保存 m_objBook.GetType().InvokeMember("SaveAs", BindingFlags.InvokeMethod, null, m_objBook, null); } else { //另存为 #region 另存为参数 object o_Filename = m_strFileName; // "123"; object o_FileFormat = System.Reflection.Missing.Value; // 缺省值 //object o_FileFormat = 1; //正常的excel的工作簿(bin文件) //object o_FileFormat = XlFileFormat.xlXMLSpreadsheet ; object o_Password = System.Reflection.Missing.Value; object o_WriteResPassword = System.Reflection.Missing.Value; object o_ReadOnlyRecommended = System.Reflection.Missing.Value; object o_CreateBackup = System.Reflection.Missing.Value; object o_Excel_XlSaveAsAccessMode_AccessMode = System.Reflection.Missing.Value; object o_ConflictResolution = System.Reflection.Missing.Value; object o_AddToMru = System.Reflection.Missing.Value; object o_TextCodepage = System.Reflection.Missing.Value; object o_TextVisualLayout = System.Reflection.Missing.Value; object o_Local = System.Reflection.Missing.Value; if (m_strFileName.Length > 4 && m_strFileName.Substring(m_strFileName.Length - 4, 4).ToLower() == ".xls") { o_FileFormat = 1; //正常的excel的工作簿(bin文件) ok o_FileFormat = XlFileFormat.xlWorkbookNormal; } if (m_strFileName.Length > 4 && m_strFileName.Substring(m_strFileName.Length - 4, 4).ToLower() == ".csv") { o_FileFormat = XlFileFormat.xlCSV; } if (m_strFileName.Length > 4 && m_strFileName.Substring(m_strFileName.Length - 4, 4).ToLower() == ".xml") { o_FileFormat = XlFileFormat.xlXMLSpreadsheet; } object[] m_Parameters_objBookSaveAs = new Object[12]; m_Parameters_objBookSaveAs[0] = o_Filename; m_Parameters_objBookSaveAs[1] = o_FileFormat; m_Parameters_objBookSaveAs[2] = o_Password; m_Parameters_objBookSaveAs[3] = o_WriteResPassword; m_Parameters_objBookSaveAs[4] = o_ReadOnlyRecommended; m_Parameters_objBookSaveAs[5] = o_CreateBackup; m_Parameters_objBookSaveAs[6] = o_Excel_XlSaveAsAccessMode_AccessMode; m_Parameters_objBookSaveAs[7] = o_ConflictResolution; m_Parameters_objBookSaveAs[8] = o_AddToMru; m_Parameters_objBookSaveAs[9] = o_TextCodepage; m_Parameters_objBookSaveAs[10] = o_TextVisualLayout; m_Parameters_objBookSaveAs[11] = o_Local; #endregion m_objBook.GetType().InvokeMember("SaveAs", BindingFlags.InvokeMethod, null, m_objBook, m_Parameters_objBookSaveAs); } return true; ////退出 //m_objApp.GetType().InvokeMember("Quit", BindingFlags.InvokeMethod, null, m_objApp, null); } catch (Exception ex) { string strErr = "Excel.Application保存时出错!出错原因:" + ex.Message; System.Windows.Forms.MessageBox.Show(strErr); return true; } } /// /// Excel退出 /// /// public void AppExcel_Exit() //退出时报错 { //if (m_objApp == null) { return false; } //if (m_objBook == null) { return false; } #region 退出 注销 try { //不提示保存 object[] m_Parameters_DisplayAlerts = new Object[1] { false }; m_objApp.GetType().InvokeMember("DisplayAlerts", BindingFlags.SetProperty, null, m_objApp, m_Parameters_DisplayAlerts); } catch { }; //******************************************************************************** try { #region 关闭参数 object o_save_changes = false; object o_Filename = System.Reflection.Missing.Value; object o_route_workbook = System.Reflection.Missing.Value; #endregion object[] m_Parameters_objBookClose = new Object[3]; m_Parameters_objBookClose[0] = o_save_changes; m_Parameters_objBookClose[1] = o_Filename; m_Parameters_objBookClose[2] = o_route_workbook; //退出Book m_objBook.GetType().InvokeMember("Close", BindingFlags.InvokeMethod, null, m_objBook, m_Parameters_objBookClose); //m_objBook.GetType().InvokeMember("Close", BindingFlags.InvokeMethod, null, m_objBook, null); //ok //退出Books m_objBooks.GetType().InvokeMember("Close", BindingFlags.InvokeMethod, null, m_objBooks, null); m_objApp.GetType().InvokeMember("Quit", BindingFlags.InvokeMethod, null, m_objApp, null); //return true; } catch (Exception ex) { string strErr = "Excel.Application退出时出错!出错原因:" + ex.Message; //System.Windows.Forms.MessageBox.Show(strErr); //return false; } finally { //System.Runtime.InteropServices.Marshal.ReleaseComObject(objCells); if (m_objSheet != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objSheet); GC.GetTotalMemory(true); } if (m_objSheets != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objSheets); GC.GetTotalMemory(true); } if (m_objBook != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objBook); GC.GetTotalMemory(true); } if (m_objBooks != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objBooks); GC.GetTotalMemory(true); } if (m_objApp != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objApp); GC.GetTotalMemory(true); } GC.Collect(); //强制对所有代进行垃圾回收 } #endregion //如果再有错误,弹出“Microsoft Office Excel 遇到问题需要关闭。我们对此引起的不便表示抱歉” ,则杀死该进程 try { this.Tools_KillExceProcess(this.LateBindingExcelStartTime, this.LateBindingExcelEndTime); } catch (Exception ex) { MessageBox.Show("杀死进程错误:" + ex.Message); } } #endregion /// /// 杀死Excel.exe的进程 /// /// Excel.exe进程的启动时间 /// Excel.exe进程启动完毕后的时间 public void Tools_KillExceProcess(DateTime beforeTime, DateTime afterTime) { System.Diagnostics.Process[] myProcesses; DateTime startTime; myProcesses = System.Diagnostics.Process.GetProcessesByName("Excel"); //得不到Excel进程ID,暂时只能判断进程启动时间 foreach (System.Diagnostics.Process myProcess in myProcesses) { startTime = myProcess.StartTime; if (startTime >= beforeTime && startTime <= afterTime) { myProcess.Kill(); } } } #endregion #region 窗体嵌入到父窗体,并重画 /// /// 子窗体嵌入到父窗体 /// private void EmbedIntoWindows() { #region 删除式样文件 //Environment.UserName //System.Environment.UserDomainName //WindowsIdentity.GetCurrent(false).Name; //C:\Documents and Settings\Administrator\Application Data\Microsoft\Excel\Excel11.xlb string LoginName = System.Environment.UserName; //计算机名字 string strExcelStyleFileName = "C:\\Documents and Settings\\" + LoginName + "\\Application Data\\Microsoft\\Excel\\Excel11.xlb"; if (System.IO.File.Exists(strExcelStyleFileName) == true) { System.IO.File.Delete(strExcelStyleFileName); } #endregion #region if (this.appSubWinHandle == IntPtr.Zero) { MessageBox.Show("没有指定子窗体的句柄:appSubWinHandle"); } #endregion myWin32API.SetParent(this.appSubWinHandle, this.Handle);   //子窗体嵌入到父窗体 //**************************************************************************** //设置显示式样 //myWin32API.SetWindowLong(this.appSubWinHandle, myWin32API.GWL_STYLE, new IntPtr(myWin32API.WS_VISIBLE)); //全部显示okokok //**************************************************************************** int nNewStyle = myWin32API.GetWindowLong(this.appSubWinHandle, myWin32API.GWL_STYLE); //nNewStyle &= ~myWin32API.WS_SYSMENU; //去掉将window的关闭按钮和最大最小化按钮,但是需要显示title //nNewStyle &= ~myWin32API.WS_EX_TOOLWINDOW; //去掉将window的关闭按钮,但是需要显示title和最大最小化按钮 nNewStyle &= ~myWin32API.WS_DLGFRAME; //去掉Micrisoft标题栏title //nNewStyle &= ~myWin32API.WS_BORDER; // //************************************************** //************************************************** /* //************************************************** int hMenu = myWin32API.GetSystemMenu((Int32)this.appSubWinHandle, false); int menuItemCount = myWin32API.GetMenuItemCount(hMenu); if (hMenu > 0) { for (int i = 0; i <= menuItemCount + 1; i++) { int y = myWin32API.GetMenuItemID(hMenu, i); int x = myWin32API.RemoveMenu(hMenu, i, myWin32API.MF_REMOVE); } } myWin32API.DrawMenuBar((Int32)this.appSubWinHandle); //********************************************************************************************************** IntPtr hSysMenu = myWin32API.GetSystemMenu(this.appSubWinHandle, 0); int xxx= myWin32API.DeleteMenu(hSysMenu, 0xF060, myWin32API.MF_BYCOMMAND); if (hMenu > 0) { for (int i = 0; i <= menuItemCount + 1; i++) { int xx = myWin32API.DeleteMenu(hSysMenu, 0xF060, myWin32API.MF_BYCOMMAND); //int x = myWin32API.DeleteMenu((IntPtr)hMenu, i, myWin32API.MF_BYPOSITION | myWin32API.MF_BYCOMMAND); } } myWin32API.DrawMenuBar((Int32)this.appSubWinHandle); //********************************************************************************************************** try { //if (hMenu > 0) //{ // int menuItemCount =myWin32API. GetMenuItemCount(hMenu); // myWin32API.RemoveMenu(hMenu, menuItemCount - 1, myWin32API.MF_REMOVE | myWin32API.MF_BYPOSITION); // myWin32API.RemoveMenu(hMenu, menuItemCount - 2, myWin32API.MF_REMOVE | myWin32API.MF_BYPOSITION); // myWin32API.RemoveMenu(hMenu, menuItemCount - 3, myWin32API.MF_REMOVE | myWin32API.MF_BYPOSITION); // myWin32API.RemoveMenu(hMenu, menuItemCount - 4, myWin32API.MF_REMOVE | myWin32API.MF_BYPOSITION); // myWin32API.RemoveMenu(hMenu, menuItemCount - 5, myWin32API.MF_REMOVE | myWin32API.MF_BYPOSITION); // myWin32API.RemoveMenu(hMenu, menuItemCount - 6, myWin32API.MF_REMOVE | myWin32API.MF_BYPOSITION); // myWin32API.RemoveMenu(hMenu, menuItemCount - 7, myWin32API.MF_REMOVE | myWin32API.MF_BYPOSITION); // //myWin32API.RemoveMenu(hMenu, menuItemCount - 8, myWin32API.MF_REMOVE | myWin32API.MF_BYPOSITION); // myWin32API.DrawMenuBar((Int32)this.appSubWinHandle); //} } catch (Exception ex) { System.Windows.Forms.MessageBox.Show("移除系统菜单出错" + ex.Message); } */ //************************************************** //************************************************** //*********************** myWin32API.SetWindowLong(this.appSubWinHandle, myWin32API.GWL_STYLE, nNewStyle); //设置窗口新式样 ReDraw(); ReDraw(); //*********************** } //重画 private void ReDraw() { if (this.appSubWinHandle != IntPtr.Zero) { //myWin32API.MoveWindow(this.appSubWinHandle, 0, 0, this.Width, this.Height, true); //myWin32API.SetWindowPos2(this.appSubWinHandle.ToInt32(), this.Handle.ToInt32(), // 0, 0, // this.Bounds.Width + 20, this.Bounds.Height + 20, // myWin32API.SWP_NOZORDER | myWin32API.SWP_NOMOVE | myWin32API.SWP_DRAWFRAME); myWin32API.SetWindowPos(this.appSubWinHandle, this.Handle, 0, 0, this.Bounds.Width, this.Bounds.Height, myWin32API.SWP_NOZORDER | myWin32API.SWP_NOMOVE | myWin32API.SWP_DRAWFRAME); myWin32API.MoveWindow(this.appSubWinHandle, 0, 0, this.Width, this.Height, true);  // Move the window to overlay it on this window } if (this.Parent != null) { this.Parent.Focus(); } } #endregion } #endregion #region (静态类) 调用 API函数 /// /// 调用 API函数 /// public class myWin32API { #region 得到当前窗体的句柄 //GetFocus()得到的肯定是ActiveWindow,但是GetActiveWindow()的窗口不一定是有输入焦点的窗口。 //GetForegroundWindow()是和窗口在Z-ORDER里的位置有关的。 //比如说一个ACTIVE WINDOW上面还有一个NOT ACTIVE WINDOW,但这个窗口的属性是TOPMOST。GetForegroundWindow()只能取得上面的这个窗口 /// /// Win32: GetForegroundWindow() /// /// [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] public static extern IntPtr GetForegroundWindow(); //获得当前活动窗口句柄 /// /// Win32: GetFocus() /// /// [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern IntPtr GetFocus(); /// /// /// /// /// [DllImport("user32.dll ")] public static extern int SetFocus(IntPtr hwnd); /// /// /// /// [DllImport("User32.DLL")] public static extern IntPtr GetActiveWindow(); #endregion #region 模拟鼠标的移动、点击等动作 /// /// 该函数可以改变鼠标指针的位置。其中X,Y是相对于屏幕左上角的绝对位置。 /// /// /// /// [DllImport("user32.dll")] static extern bool SetCursorPos(int X, int Y); /// /// 可以设置鼠标指针绝对的位置,而且可以以相对坐标来设置。另外,该函数还可以模拟鼠标左右键点击、鼠标滚轮操作等。 /// /// 一个基于uint类型的枚举,鼠标d的动作类型 /// /// /// /// [DllImport("user32.dll")] static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo); [Flags] enum MouseEventFlag : uint { Move = 0x0001, LeftDown = 0x0002, LeftUp = 0x0004, RightDown = 0x0008, RightUp = 0x0010, MiddleDown = 0x0020, MiddleUp = 0x0040, XDown = 0x0080, XUp = 0x0100, Wheel = 0x0800, VirtualDesk = 0x4000, Absolute = 0x8000 } #endregion #region 定义API方法 /// /// /// /// /// /// [DllImport("user32.dll")] public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow); /// /// /// /// /// [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] public static extern bool SetForegroundWindow(IntPtr hWnd); /// /// /// /// /// [DllImport("user32.dll")] public static extern bool IsIconic(IntPtr hWnd); /// /// /// /// /// [DllImport("user32.dll")] public static extern bool IsZoomed(IntPtr hWnd); #region //********API32函数声明************** // ********************************************************************** //// Win32: SetWindowsHookEx() //[DllImport("user32.dll", CharSet = CharSet.Auto, // CallingConvention = CallingConvention.StdCall)] //private static extern IntPtr SetWindowsHookEx(HookType code, // HookProc func, // IntPtr hInstance, // int threadID); /// /// Win32: UnhookWindowsHookEx() /// /// /// [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] public static extern int UnhookWindowsHookEx(IntPtr hhook); /// /// Win32: CallNextHookEx() /// /// /// /// /// /// [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] public static extern int CallNextHookEx(IntPtr hhook, int nCode, int wParam, IntPtr lParam); /// /// Win32: GetModuleHandle() /// /// /// [DllImport("kernel32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] private static extern IntPtr GetModuleHandle(string lpModuleName); /// /// /// /// /// /// [DllImport("user32.dll")] public static extern IntPtr GetWindowThreadProcessId(IntPtr hWnd, IntPtr ProcessId); ////获得活动窗口的线程号 /// /// Win32: GetWindowThreadProcessId() /// /// /// /// [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern int GetWindowThreadProcessId(IntPtr hwnd, int lpdwProcessId); ////获得活动窗口的线程号 /// /// Win32: GetCurrentThreadId /// /// [DllImport("kernel32.dll", EntryPoint = "GetCurrentThreadId")] public static extern int GetCurrentThreadId(); /// /// Win32: AttachThreadInput() /// /// /// /// /// [DllImport("user32.dll", CharSet = CharSet.Auto)] private static extern int AttachThreadInput(int idAttach, int idAttachTo, int fAttach); /// /// /// /// /// /// /// [DllImport("user32.dll")] public static extern IntPtr AttachThreadInput(IntPtr idAttach, IntPtr idAttachTo, int fAttach); /// /// Win32: SendMessage() /// /// /// /// /// /// [DllImport("user32.dll", CharSet = CharSet.Auto)] private static extern int SendMessage(HandleRef hwnd, int wMsg, int wParam, int lParam); /// /// /// /// /// /// /// /// [DllImport("user32.dll", EntryPoint = "SendMessage", CharSet = CharSet.Auto)] public static extern int SendMessageString(HandleRef hwnd, int wMsg, int wParam, StringBuilder lParam); /// /// Win32: GetWindowText() /// /// /// /// /// [DllImport("user32.dll", CharSet = CharSet.Auto)] private static extern int GetWindowText(IntPtr hwnd, StringBuilder lpString, int nMaxCount); /// /// Win32: GetClassName() /// /// /// /// /// [DllImport("user32.dll", CharSet = CharSet.Auto)] private static extern int GetClassName(IntPtr hwnd, StringBuilder lpClassName, int nMaxCount); #endregion #region DDE学习用 //************************* /// /// /// /// /// /// /// /// [DllImport("user32.dll", SetLastError = true)] public static extern long SetTimer(IntPtr hwnd, long nIDEvent, long uElapse, long lpTimerFunc); /// /// /// /// /// /// [DllImport("user32.dll", SetLastError = true)] public static extern long KillTimer(IntPtr hwnd, long nIDEvent); //************************ /// /// /// /// /// /// /// /// [DllImport("user32.dll", EntryPoint = "DdeConnect", CharSet = CharSet.Ansi)] public static extern IntPtr DdeConnect(uint idInst, IntPtr hszService, IntPtr hszTopic, IntPtr pCC); /// /// /// /// /// /// /// /// /// /// /// [DllImport("user32.dll", EntryPoint = "DdeCreateDataHandle", CharSet = CharSet.Ansi)] public static extern IntPtr DdeCreateDataHandle( uint idInst, byte[] pSrc, uint cb, uint cbOff, IntPtr hszItem, uint wFmt, uint afCmd); /// /// /// /// /// /// /// [DllImport("user32.dll", EntryPoint = "DdeCreateStringHandle", CharSet = CharSet.Ansi)] public static extern IntPtr DdeCreateStringHandle(uint idInst, string psz, int iCodePage); /// /// /// /// /// [DllImport("user32.dll", EntryPoint = "DdeDisconnect", CharSet = CharSet.Ansi)] public static extern bool DdeDisconnect(IntPtr hConv); /// /// /// /// /// /// /// [DllImport("user32.dll", EntryPoint = "DdeEnableCallback", CharSet = CharSet.Ansi)] public static extern bool DdeEnableCallback(uint idInst, IntPtr hConv, uint wCmd); /// /// /// /// /// [DllImport("user32.dll", EntryPoint = "DdeFreeDataHandle", CharSet = CharSet.Ansi)] public static extern bool DdeFreeDataHandle(IntPtr hData); /// /// /// /// /// /// [DllImport("user32.dll", EntryPoint = "DdeFreeStringHandle", CharSet = CharSet.Ansi)] public static extern bool DdeFreeStringHandle(uint idInst, IntPtr hsz); /// /// /// /// /// /// /// /// [DllImport("user32.dll", EntryPoint = "DdeGetData", CharSet = CharSet.Ansi)] public static extern uint DdeGetData(IntPtr hData, [Out] byte[] pDst, uint cbMax, uint cbOff); //[DllImport("user32.dll", EntryPoint = "DdeInitialize", CharSet = CharSet.Ansi)] //public static extern uint DdeInitialize(ref uint pidInst, DdeDelegate pfnCallback, uint afCmd, uint ulRes); /// /// /// /// /// /// /// /// /// [DllImport("user32.dll", EntryPoint = "DdeQueryString", CharSet = CharSet.Ansi)] public static extern uint DdeQueryString(uint idInst, IntPtr hsz, StringBuilder psz, uint cchMax, int iCodePage); /// /// /// /// /// [DllImport("user32.dll", EntryPoint = "DdeUninitialize", CharSet = CharSet.Ansi)] public static extern bool DdeUninitialize(uint idInst); #endregion /// /// SetParent /// /// /// /// [DllImport("user32.dll", SetLastError = true)] public static extern long SetParent(IntPtr hWndChild, IntPtr hWndNewParent); /// /// MoveWindow /// /// /// /// /// /// /// /// [DllImport("user32.dll", SetLastError = true)] public static extern bool MoveWindow(IntPtr hwnd, int x, int y, int cx, int cy, bool repaint); //bool repaint是否接受原始窗体 /// /// GetSystemMenu /// /// /// /// [DllImport("user32.dll", EntryPoint = "GetSystemMenu")] public static extern Int32 GetSystemMenu(Int32 hWnd, int Revert); /// /// GetSystemMenu /// /// /// /// [DllImport("user32.dll", EntryPoint = "GetSystemMenu")] //第二种方法 public static extern Int32 GetSystemMenu(Int32 hWnd, bool Revert); /// /// GetSystemMenu /// /// /// /// [DllImport("user32.dll", EntryPoint = "GetSystemMenu")] //第三种方法 public static extern IntPtr GetSystemMenu(IntPtr hwnd, int bRevert); /// /// GetMenuItemCount /// /// /// [DllImport("user32.dll", EntryPoint = "GetMenuItemCount")] public static extern Int32 GetMenuItemCount(Int32 hMenu); /// /// GetMenuItemID /// /// /// /// [DllImport("user32.dll")] public static extern int GetMenuItemID(int Menuhandle, int pos); /// /// RemoveMenu /// /// /// /// /// [DllImport("user32.dll", EntryPoint = "RemoveMenu")] public static extern Int32 RemoveMenu(Int32 hMenu, Int32 nPosition, Int32 wFlags); /// /// DeleteMenu /// /// /// /// /// [DllImport("user32.dll", EntryPoint = "DeleteMenu")] public static extern int DeleteMenu( IntPtr hMenu, int nPosition, int wFlags); /// /// DrawMenuBar /// /// /// [DllImport("user32.dll", EntryPoint = "DrawMenuBar")] public static extern Int32 DrawMenuBar(Int32 hWnd); /// /// GetWindowThreadProcessId /// /// /// /// [DllImport("user32.dll", EntryPoint = "GetWindowThreadProcessId", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] private static extern long GetWindowThreadProcessId(long hWnd, long lpdwProcessId); /// /// FindWindow /// /// /// /// [DllImport("user32.dll", SetLastError = true)] private static extern IntPtr FindWindow(string lpClassName, string lpWindowName); /// /// SetWindowLong /// /// /// /// /// [DllImport("user32.dll", EntryPoint = "SetWindowLongA", SetLastError = true)] public static extern int SetWindowLong(IntPtr hWnd, int nIndex, IntPtr dwNewLong); //第二种方法 /// /// SetWindowPos /// /// /// /// /// /// /// /// /// [DllImport("user32.dll", SetLastError = true)] public static extern long SetWindowPos(IntPtr hwnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint wFlags); /// /// SetWindowPos2 /// /// /// /// /// /// /// /// /// [DllImport("user32.dll", EntryPoint = "SetWindowPos")] public static extern bool SetWindowPos2( int hWnd, // handle to window int hWndInsertAfter, // placement-order handle int X, // horizontal position int Y, // vertical position int cx, // width int cy, // height uint uFlags // window-positioning options ); [DllImport("user32.dll", EntryPoint = "PostMessageA", SetLastError = true)] private static extern bool PostMessage(IntPtr hwnd, uint Msg, long wParam, long lParam); /// /// SetWindowLong /// /// /// /// /// [DllImport("user32.dll")] public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int newN); /// /// GetWindowLong /// /// /// /// [DllImport("user32.dll")] public static extern int GetWindowLong(IntPtr hWnd, int nIndex); #endregion //****************************************************** #region 定义 常量 /// /// /// public const int GWL_STYLE = -16; //设置新的窗口风格 /// /// /// public const int GWL_EXSTYLE = -20; /// /// /// public const int WS_CAPTION = 0x00C00000; //WS_CAPTION = WS_BORDER | WS_DLGFRAME; //window with a title bar /// /// /// public const int WS_SYSMENU = 0x00080000; /// /// /// public const int MF_BYCOMMAND = 0x0; /// /// /// public const int WS_VISIBLE = 0x10000000; /// /// /// public const int HWND_NOTOPMOST = -2; /// /// /// public const int MF_BYPOSITION = 0x400; /// /// /// public const int MF_REMOVE = 0x1000; /// /// /// public const int WS_MAXIMIZEBOX = 0x00010000; // /// /// /// public const int WS_MINIMIZEBOX = 0x00020000; // /// /// /// public const int SWP_DRAWFRAME = 0x20; /// /// /// public const int SWP_NOOWNERZORDER = 0x200; // Dont do owner Z ordering /// /// /// public const int SWP_NOREDRAW = 0x8; // /// /// /// public const int SWP_NOZORDER = 0x4; // /// /// /// public const int SWP_SHOWWINDOW = 0x0040; /// /// /// public const int SWP_HIDEWINDOW = 0x0080; /// /// /// public const int SWP_FRAMECHANGED = 0x20; //H20 The frame changed: send WM_NCCALCSIZE /// /// /// public const int SWP_NOACTIVATE = 0x10; /// /// /// public const int SWP_ASYNCWINDOWPOS = 0x4000; /// /// /// public const int SWP_NOMOVE = 0x2; //H2 /// /// /// public const int SWP_NOSIZE = 0x1; //H1 /// /// /// public const int SWP_NOCOPYBITS = 0x100; /// /// /// public const int SWP_NOREPOSITION = SWP_NOOWNERZORDER; /// /// /// public const int WM_CLOSE = 0x10; /// /// /// public const int WS_CHILD = 0x40000000; /// /// /// public const int WS_BORDER = 0x00800000; //window with border /// /// /// public const int WS_DLGFRAME = 0x00400000; //window with double border but no title // Extended Window Styles /// /// /// public static int WS_EX_MDICHILD = 0x40; /// /// /// public static int WS_EX_TOPMOST = 0x00000008; /// /// /// public static int WS_EX_TRANSPARENT = 0x00000020; /// /// /// public static int WS_EX_TOOLWINDOW = 0x00000080; /// /// /// public static int WS_EX_WINDOWEDGE = 0x00000100; /// /// /// public static int WS_EX_CLIENTEDGE = 0x00000200; /// /// /// public const int SW_HIDE = 0; /// /// /// public const int SW_SHOWNORMAL = 1; /// /// /// public const int SW_SHOWMINIMIZED = 2; /// /// /// public const int SW_SHOWMAXIMIZED = 3; /// /// /// public const int SW_SHOWNOACTIVATE = 4; /// /// /// public const int SW_RESTORE = 9; /// /// /// public const int SW_SHOWDEFAULT = 10; #endregion } #endregion #region 静态类)DataTable导出到Excel文件 /// /// (静态类)DataTable导出到Excel文件 /// public class ExportToExcel { /// /// 把DataTable的数据导出到Excel文件中 /// /// 要导出的数据表 /// 保存的Excel文件名 /// 是否导出成功 public static string dataTableExportToExcel_cell(ref DataTable _dataTable, string _fileName) { if (_dataTable == null) { return null; } SuperTools.UC_EmbedExcelIntoWinFormNoDLL uc1 = new UC_EmbedExcelIntoWinFormNoDLL(); uc1.AppExcel_Open(null, false); string strErr = null; try { //写入字段名的信息 for (int i = 0; i < _dataTable.Columns.Count; i++) { uc1.SetCell_Value(1, i + 1, _dataTable.Columns[i].Caption); //写第一行内容为dataTable的字段名 } //写入表中数据内容 for (int i = 0; i < _dataTable.DefaultView.Count; i++) { for (int col = 0; col < _dataTable.Columns.Count; col++) { uc1.SetCell_Value(i + 2, col + 1, _dataTable.DefaultView[i][col].ToString()); //转化为文本再写到excel当中 } } //uc1.App_ExcelSave(_fileName); strErr = null; } catch (Exception operExce) { strErr = "写入表中数据!错误原因:" + operExce.Message; } finally { uc1.AppExcel_Exit(); } return strErr; } /// /// 把DataTable的数据导出到Excel文件中 /// /// 要导出的数据表 /// 保存的Excel文件名 /// 是否导出成功 public static string dataTableExportToExcel_Range(ref DataTable _dataTable, string _fileName) { if (_dataTable == null) { return null; } SuperTools.UC_EmbedExcelIntoWinFormNoDLL uc1 = new UC_EmbedExcelIntoWinFormNoDLL(); uc1.AppExcel_Open(null, false); string strErr = null; try { #region //写入字段名的信息 ////获取A1单元格所在区域 string BeginPoint = "A1"; string EndPoint = Convert.ToString(Convert.ToChar(64 + _dataTable.Columns.Count)) + "1"; int rows = 1; int columns = _dataTable.Columns.Count; string[,] Array_strHeadName_Value = new string[rows, columns]; //赋值:数值类型=string for (int i = 0; i < rows; i++) //第一行 { for (int j = 0; j < columns; j++) { Array_strHeadName_Value[i, j] = _dataTable.Columns[j].Caption; //字段名 } } uc1.SetRangeArray_Value(BeginPoint, EndPoint, Array_strHeadName_Value); #endregion //********************************** #region 写入表中数据内容 //excel的其他行的Range中填充数据 string BeginPoint_1 = "A2"; string EndPoint_1 = Convert.ToString(Convert.ToChar(64 + _dataTable.Columns.Count)) + (_dataTable.Rows.Count + 1).ToString().Trim(); int rows_1 = _dataTable.Rows.Count; int columns_1 = _dataTable.Columns.Count; string[,] Array_string_Value = new string[rows_1, columns_1]; //赋值:数值类型=string for (int y = 0; y < _dataTable.Rows.Count; y++) { for (int x = 0; x < _dataTable.Columns.Count; x++) { Array_string_Value[y, x] = _dataTable.Rows[y][x].ToString(); } } uc1.SetRangeArray_Value(BeginPoint_1, EndPoint_1, Array_string_Value); #endregion uc1.AppExcel_SaveAs(_fileName); strErr = null; } catch (Exception operExce) { strErr = "写入表中数据!错误原因:" + operExce.Message; } finally { uc1.AppExcel_Exit(); } return strErr; } /// /// 把DataTable的数据导出到Excel文件中 测试 /// /// /// /// public static string dataTableExportToExcel_Range_x(DataTable w2, string fileName) { object MyApp; object MyBook; object MyBooks; object MySheet; object MySheets; object MyRange; object[] MyParameters; //Type MyClassType; if (w2 == null || w2.Rows.Count == 0) { string strErr = "dataTable为空 或 dataTable表中无数据"; return strErr; } try { // 获取Excel类型并建立其实例 Type MyClassType = Type.GetTypeFromProgID("Excel.Application"); if (MyClassType == null) { string strErr = "本计算机无Excel.Application"; return strErr; } MyApp = Activator.CreateInstance(MyClassType); if (MyApp == null) { string strErr = "本计算机的Excel.Application无法正常使用!"; return strErr; } //获取Workbook集 MyBooks = MyApp.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, MyApp, null); //添加一个新的Workbook MyBook = MyBooks.GetType().InvokeMember("Add", BindingFlags.InvokeMethod, null, MyBooks, null); //获取Sheet集 MySheets = MyBook.GetType().InvokeMember("Worksheets", BindingFlags.GetProperty, null, MyBook, null); //获取第一个Sheet对象 MyParameters = new Object[1] { 1 }; MySheet = MySheets.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, MySheets, MyParameters); try { #region //写入字段名的信息 ////获取A1单元格所在区域 MyParameters = new object[1]; MyParameters[0] = "A1:" + Convert.ToString(Convert.ToChar(64 + w2.Columns.Count)) + "1"; //定义excel的第一行的Range MyRange = MySheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, MySheet, MyParameters); // //********************************** //excel的第一行的Range中填充数据,该数据=dataTable的字段名 object[] objHeaders = new Object[w2.Columns.Count]; MyParameters = new object[1]; // objHeaders[0] = w2.Columns[1].ToString(); for (int i = 0; i < w2.Columns.Count; i++) { //objHeaders[i] = w2.Columns[i].ToString(); //字段名 objHeaders[i] = w2.Columns[i].Caption; //字段名 } MyParameters[0] = objHeaders; MyRange.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, MyRange, MyParameters);//写字段名 #endregion //********************************** #region 写入表中数据内容 //excel的其他行的Range中填充数据 MyParameters = new object[2]; MyParameters[0] = "A2:" + Convert.ToString(Convert.ToChar(64 + w2.Columns.Count)) + (w2.Rows.Count + 1).ToString().Trim(); MyParameters[1] = Missing.Value; MyRange = MySheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, MySheet, MyParameters); Object[,] MyData = new Object[w2.Rows.Count, w2.Columns.Count]; for (int y = 0; y < w2.Rows.Count; y++) { for (int x = 0; x < w2.Columns.Count; x++) { if (true) //(A3.Contains(ii)) { MyData[y, x] = w2.Rows[y][x]; } //else //{ // MyData[ll, ii] = "'" + w2.Rows[ll][ii].ToString(); //} } } MyParameters = new object[1]; MyParameters[0] = MyData; MyRange.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, MyRange, MyParameters); #endregion ////MyParameters = new object[1]; //////启动 Excel ////MyParameters[0] = true; ////MyApp.GetType().InvokeMember("Visible", BindingFlags.SetProperty, null, MyApp, MyParameters); ////MyApp.GetType().InvokeMember("UserControl", BindingFlags.SetProperty, null, MyApp, MyParameters); } catch (Exception ex) { string strErr = "操作App内容出错!错误原因:" + ex.Message; return strErr; } finally { //不提示保存 MyParameters = new Object[1] { false }; MyApp.GetType().InvokeMember("DisplayAlerts", BindingFlags.SetProperty, null, MyApp, MyParameters); //保存文件并退出 MyParameters = new Object[1] { fileName }; MyBook.GetType().InvokeMember("SaveAs", BindingFlags.InvokeMethod, null, MyBook, MyParameters); MyApp.GetType().InvokeMember("Quit", BindingFlags.InvokeMethod, null, MyApp, null); //System.Runtime.InteropServices.Marshal.ReleaseComObject(objCells); System.Runtime.InteropServices.Marshal.ReleaseComObject(MySheet); GC.GetTotalMemory(true); System.Runtime.InteropServices.Marshal.ReleaseComObject(MySheets); GC.GetTotalMemory(true); System.Runtime.InteropServices.Marshal.ReleaseComObject(MyBook); GC.GetTotalMemory(true); System.Runtime.InteropServices.Marshal.ReleaseComObject(MyBooks); GC.GetTotalMemory(true); System.Runtime.InteropServices.Marshal.ReleaseComObject(MyApp); GC.GetTotalMemory(true); } return null; } catch (Exception appExce) { string strErr = "操作App出错!错误原因:" + appExce.Message; return strErr; } } /// /// 另外一种方法:把DataTable的数据导出到XML/Excel文件中 带格式 /// /// /// public static void dataTableExportToExcelXml(DataTable _DataTable, string fileName) { System.IO.StreamWriter excelDoc; excelDoc = new System.IO.StreamWriter(fileName); const string startExcelXML = "\r\n\r\n \r\n " + "\r\n " + "\r\n " + "\r\n \r\n " + "\r\n \r\n " + "\r\n "; const string endExcelXML = ""; int rowCount = 0; int sheetCount = 1; /* */ excelDoc.Write(startExcelXML); excelDoc.Write(""); excelDoc.Write(""); excelDoc.Write(""); for (int x = 0; x < _DataTable.Columns.Count; x++) { excelDoc.Write(""); excelDoc.Write(_DataTable.Columns[x].ColumnName); excelDoc.Write(""); } excelDoc.Write(""); foreach (DataRow x in _DataTable.Rows) { rowCount++; //if the number of rows is > 64000 create a new page to continue output if (rowCount == 64000) { rowCount = 0; sheetCount++; excelDoc.Write("
"); excelDoc.Write("
"); excelDoc.Write(""); excelDoc.Write(""); } excelDoc.Write(""); //ID=" + rowCount + " for (int y = 0; y < _DataTable.Columns.Count; y++) { System.Type rowType; rowType = x[y].GetType(); switch (rowType.ToString()) { case "System.String": string XMLstring = x[y].ToString(); XMLstring = XMLstring.Trim(); XMLstring = XMLstring.Replace("&", "&"); XMLstring = XMLstring.Replace(">", ">"); XMLstring = XMLstring.Replace("<", "<"); excelDoc.Write("" + ""); excelDoc.Write(XMLstring); excelDoc.Write(""); break; case "System.DateTime": //Excel has a specific Date Format of YYYY-MM-DD followed by //the letter 'T' then hh:mm:sss.lll Example 2005-01-31T24:01:21.000 //The Following Code puts the date stored in XMLDate //to the format above DateTime XMLDate = (DateTime)x[y]; string XMLDatetoString = ""; //Excel Converted Date XMLDatetoString = XMLDate.Year.ToString() + "-" + (XMLDate.Month < 10 ? "0" + XMLDate.Month.ToString() : XMLDate.Month.ToString()) + "-" + (XMLDate.Day < 10 ? "0" + XMLDate.Day.ToString() : XMLDate.Day.ToString()) + "T" + (XMLDate.Hour < 10 ? "0" + XMLDate.Hour.ToString() : XMLDate.Hour.ToString()) + ":" + (XMLDate.Minute < 10 ? "0" + XMLDate.Minute.ToString() : XMLDate.Minute.ToString()) + ":" + (XMLDate.Second < 10 ? "0" + XMLDate.Second.ToString() : XMLDate.Second.ToString()) + ".000"; excelDoc.Write("" + ""); excelDoc.Write(XMLDatetoString); excelDoc.Write(""); break; case "System.Boolean": excelDoc.Write("" + ""); excelDoc.Write(x[y].ToString()); excelDoc.Write(""); break; case "System.Int16": case "System.Int32": case "System.Int64": case "System.Byte": excelDoc.Write("" + ""); excelDoc.Write(x[y].ToString()); excelDoc.Write(""); break; case "System.Decimal": case "System.Double": excelDoc.Write("" + ""); excelDoc.Write(x[y].ToString()); excelDoc.Write(""); break; case "System.DBNull": excelDoc.Write("" + ""); excelDoc.Write(""); excelDoc.Write(""); break; default: throw (new Exception(rowType.ToString() + " not handled.")); } } excelDoc.Write(""); } excelDoc.Write("
"); excelDoc.Write("
"); excelDoc.Write(endExcelXML); excelDoc.Close(); } } #endregion #region (静态类)DataTable的工具类 /// /// (静态类)DataTable的工具类 /// public class DataTableTools { /// /// Hashtable的排序 /// /// Hashtable的名字 /// System.Collections.ArrayList public static System.Collections.ArrayList HashTable_To_Sort(System.Collections.Hashtable _HasTable) { //根据选择的行的ID号,读取其相应的数据 System.Collections.ArrayList akeys = new System.Collections.ArrayList(_HasTable.Keys); akeys.Sort(); //按键值字母顺序进行排序 foreach (int str_skey in akeys) { Console.Write(str_skey + ":"); Console.WriteLine(_HasTable[str_skey]);//排序后输出 } return akeys; } /// /// 将目标Hashtable转换成DataTable返回 /// /// 目标Hashtable /// 转换后的DataTable public static DataTable HashTable_To_Table(System.Collections.Hashtable HasTable) { try { DataTable rtn_Table = new DataTable("HASHTABLE"); DataColumn KeyColumn = new DataColumn("KEY", typeof(object)); DataColumn ValueColumn = new DataColumn("VALUE", typeof(object)); rtn_Table.Columns.Add(KeyColumn); rtn_Table.Columns.Add(ValueColumn); rtn_Table.AcceptChanges(); System.Collections.IDictionaryEnumerator Has = HasTable.GetEnumerator(); while (Has.MoveNext()) { DataRow nRow = rtn_Table.NewRow(); nRow["KEY"] = Has.Key; nRow["VALUE"] = Has.Value; rtn_Table.Rows.Add(nRow); } rtn_Table.AcceptChanges(); return rtn_Table; } catch (System.Exception ex) { Console.WriteLine(ex.ToString()); return null; } } /// /// Hashtable按键值字母顺序进行排序 /// /// /// public static DataTable SetHashtablekeysSort(System.Collections.Hashtable _ht_1) { DataTable myDataTable = new DataTable(); //********************* System.Collections.ArrayList akeys = new System.Collections.ArrayList(_ht_1.Keys); //别忘了导入System.Collections akeys.Sort(); //按键值字母顺序进行排序 //***************************************** myDataTable = SuperTools.DataTableTools.HashTable_To_Table(_ht_1); return myDataTable; } /// /// 将目标DataTable 转换成Hashtable返回 /// /// 目标Hashtable /// 转换后的Hashtable public static System.Collections.Hashtable Table_To_HashTable(DataTable _DataTable) { System.Collections.Hashtable _Hashtable = null; return _Hashtable; } ///// ///// 动态更新标的行数,根据新的行数动态更新 ///// ///// 目标DataTable ///// 新的行数 //public static void SetTableRows(ref DataTable table, int newRowCount) //{ // int oldRowCount = table.Rows.Count; // if (oldRowCount != newRowCount) // { // int absCount = Math.Abs(oldRowCount - newRowCount); // if (oldRowCount > newRowCount) // { // for (int i = oldRowCount - 1; i >= absCount; i--) // { // table.Rows[i].Delete(); // } // } // else // { // object[] ColumnValue = new object[table.Columns.Count]; // for (int i = 0; i < absCount; i++) // { // table.Rows.Add(ColumnValue); // } // } // } //} /// /// 定义的table列的一个示例 /// public static void Add_Columns_EG() { System.Collections.ArrayList ParaColumns = new System.Collections.ArrayList(); ParaColumns.Add("ID|Int16"); // ParaColumns.Add("日期|DateTime"); // System.DateTime ParaColumns.Add("工资|Decimal"); //System.Decimal ParaColumns.Add("电话|String"); //System.String ParaColumns.Add("年龄|Int16"); //System.Int16 ParaColumns.Add("选择|Boolean"); //System .Boolean System.Data.DataTable MyDataDataTable = new DataTable(); Add_Columns(ref MyDataDataTable, ParaColumns); } /// /// 定义的table列 /// /// 目标DataTable /// 增加的数列 public static void Add_Columns(ref System.Data.DataTable _Table, System.Collections.ArrayList _ParaColumns) { for (int i = 0; i < _ParaColumns.Count; i++) { string[] strColumnsNameType = new string[2]; //字段名和字段类型 strColumnsNameType = ((string)_ParaColumns[i]).Split('|'); string strColumnsType = strColumnsNameType[1]; #region 设置字段名字和类型 System.Type MyType; switch (strColumnsType) { //ParaColumns.Add("ID|Int16"); // //ParaColumns.Add("日期|DateTime"); // System.DateTime //ParaColumns.Add("工资|Decimal"); //System.Decimal //ParaColumns.Add("电话|String"); //System.String //ParaColumns.Add("年龄|Int16"); //System.Int16 //ParaColumns.Add("选择|Boolean"); //System .Boolean case "String": MyType = typeof(System.String); break; case "Boolean": MyType = typeof(System.Boolean); break; case "Int16": MyType = typeof(System.Int16); break; case "Decimal": MyType = typeof(System.Decimal); break; case "DateTime": MyType = typeof(System.DateTime); break; } MyType = typeof(string); #endregion 设置字段名字和类型 _Table.Columns.Add(strColumnsNameType[0], MyType); //typeof(string); //typeof(decimal); //typeof(float); //typeof(bool); //typeof(byte); //typeof(Double); //typeof(System.String); } } /// /// 增加的table行 /// /// 目标DataTable /// DataTable的行数 public static void Add_Rows(ref System.Data.DataTable _Table, int _RowsCount) { //for (int i = 0; i < _IPCount; i++) //{ // _Table.Rows.Add(new object[] { null, null, null, null, null, null, null, null, null, null, null }); //} //********** int oldRowCount = _Table.Rows.Count; int NewRowCount = _RowsCount; if (oldRowCount != NewRowCount) { int absCount = Math.Abs(oldRowCount - NewRowCount); if (oldRowCount > NewRowCount) { for (int i = oldRowCount - 1; i >= absCount; i--) { _Table.Rows[i].Delete(); } } else { object[] ColumnValue = new object[_Table.Columns.Count]; for (int i = 0; i < absCount; i++) { _Table.Rows.Add(ColumnValue); } //for } //else } //if } /// /// 增加_Table行的一个实际示例(五种数据类型) /// /// 目标DataTable /// DataTable的行数 public static void Add_Rows_EG(ref System.Data.DataTable _Table, int _RowsCount) { Random r = new Random(); object[] ColumnValue = new object[_Table.Columns.Count]; DateTime t = DateTime.Now; //取得当前系统时间 TimeSpan MySpan = new TimeSpan(1, 2, 3, 4); // 注意: TimeSpan(days, hours, minutes, seconds) //t = t.Subtract(MySpan); //在当前时间上减上MySpan string ss = "2007-9-5 20:33:49"; for (int i = 0; i < _RowsCount; i++) { ColumnValue[0] = i; ColumnValue[1] = t; ColumnValue[2] = r.NextDouble() * 1000000; ColumnValue[3] = RandomTelephone(r); ColumnValue[4] = r.Next(100); ColumnValue[5] = false; _Table.Rows.Add(ColumnValue); t = t.Add(MySpan); //在当前时间上加上上MySpan //ColumnValue["ID"] = i; //ColumnValue["日期"] = DateTime.Today.AddDays(i); //ColumnValue["工资"] = r.NextDouble() * 1000000; //ColumnValue["电话"] = RandomTelephone(r); //ColumnValue["年龄"] = r.Next(100); //ColumnValue["选择"] = false; } } ///// ///// 增加_Table行的一个实际示例(五种数据类型) ///// ///// 待写入的值 ///// DataTable的行数 ///// /// /// 根据一个已有的空二维数组的 Object[,] ,填充随机数 /// /// 待写入已有的二维数组的Object[,] /// 填充随机数的二维数组的 Object[,] public static object[,] Get_ObjectArrayValue_Random(ref Object[,] _ObjectArray) { Random r = new Random(); DateTime t = DateTime.Now; //取得当前系统时间 TimeSpan MySpan = new TimeSpan(1, 2, 3, 4); // 注意: TimeSpan(days, hours, minutes, seconds) //t = t.Subtract(MySpan); //在当前时间上减上MySpan string ss = "2007-9-5 20:33:49"; for (int i = 0; i < _ObjectArray.GetLength(0); i++) //行数 { if (_ObjectArray.GetLength(1) >= 5) { _ObjectArray[i, 0] = i; _ObjectArray[i, 1] = t; _ObjectArray[i, 2] = r.NextDouble() * 1000000; _ObjectArray[i, 3] = RandomTelephone(r); _ObjectArray[i, 4] = r.Next(100); _ObjectArray[i, 5] = false; t = t.Add(MySpan); //在当前时间上加上上MySpan } } return _ObjectArray; } /// /// 根据行列数得到填充随机数的二维数组的 Object[,] /// /// 行数 /// 列数 /// 填充随机数的二维数组的 Object[,] public static object[,] Get_ObjectArrayValue_EG(int _nRowsCount, int _nColumnsCount) { Random r = new Random(); object[,] obEG = new object[_nRowsCount, _nColumnsCount]; obEG = SuperTools.DataTableTools.Get_ObjectArrayValue_Random(ref obEG); return obEG; } /// /// 产生一个随机的字符 /// /// /// private static string RandomTelephone(Random r) { //Random r = new Random(); System.Text.StringBuilder s = new System.Text.StringBuilder(); for (int i = 0; i < 11; i++) s.Append(r.Next(10)); return s.ToString(); } /// /// 二维数组的 Object[,]转换成为DataTable 字段类型都为string /// /// 二维数组的 Object[,] /// 二维数组的 Object[,]是否包含字段名 /// public static DataTable Get_DataTableFromObjectArray(ref Object[,] _ObjectArray, bool _bExistColumnsName) { DataTable dtTable1 = new DataTable(); if (_ObjectArray == null) { return null; } if (!_bExistColumnsName) { System.Collections.ArrayList ParaColumns = new System.Collections.ArrayList(); for (int i = 0; i < _ObjectArray.GetLength(1); i++) //列数 { ParaColumns.Add("字段" + (i + 1).ToString() + "|String"); //System.String } Add_Columns(ref dtTable1, ParaColumns); //增加DataTabe列 Add_Rows(ref dtTable1, _ObjectArray.GetLength(0)); //:增加DataTabe行 for (int i = 0; i < _ObjectArray.GetLength(0); i++) //行数 { for (int j = 0; j < _ObjectArray.GetLength(1); j++) //列数 { dtTable1.Rows[i][j] = _ObjectArray[i, j]; } } } else { System.Collections.ArrayList ParaColumns = new System.Collections.ArrayList(); for (int i = 0; i < _ObjectArray.GetLength(1); i++) //列数 { ParaColumns.Add(_ObjectArray[1, i].ToString() + "|String"); //System.String } Add_Columns(ref dtTable1, ParaColumns); //增加DataTabe列 Add_Rows(ref dtTable1, _ObjectArray.GetLength(0) - 1); //:增加DataTabe行 for (int i = 0; i < _ObjectArray.GetLength(0); i++) //行数 { for (int j = 0; j < _ObjectArray.GetLength(1); j++) //列数 { dtTable1.Rows[i][j] = _ObjectArray[i, j]; } } } return dtTable1; } /// /// 设置字段名字和类型 并且初始化行数,内容为空 /// /// 目标DataTable /// 增加空内容到每一行 ///增加空内容到每一行 public static void Set_Table_Columns_Rows(ref System.Data.DataTable _Table, System.Collections.ArrayList _ParaColumns, int _RowsCount) { Add_Columns(ref _Table, _ParaColumns); Add_Rows(ref _Table, _RowsCount); } /// /// 根据查询条件:刷选行(满足条件的行),返回新的DataTable /// /// 源数据DataTable /// 选择列的条件:刷选行(满足条件的行) /// public static DataTable GetNewDataTable(ref DataTable _dt, string _strSelectRowsCondition) { if (_dt == null) { return null; } //string strMyFilterCondition = "蒸汽"; //string Filter = "介质类型 = '" + strMyFilterCondition + "'";    //介质类型过滤 DataTable newdt = new DataTable(); newdt = _dt.Clone(); //创建同结构的表,但没有行数据 行数= 0; try { DataRow[] rows = _dt.Select(_strSelectRowsCondition); //DataRow[] rows = _dt.Select(_strCondition); //for (int i = 0; i < rows.Length; i++) //{ // newdt.ImportRow((DataRow)rows[i]); //} foreach (DataRow row in rows) { //newdt.Rows.Add(row.ItemArray); //ok newdt.ImportRow(row); //ok } newdt.AcceptChanges(); } catch //(Exception ex) { return null; } return newdt;//返回的查询结果 } /// /// 根据给定的列名,返回新的DataTable /// /// 源数据DataTable /// 第一列的列名 /// 第二列的列名 /// public static DataTable GetNewDataTable(ref DataTable _dt, string _Column_1_Name, string _Column_2_Name) { if (_dt == null) { return null; } DataTable newdt = new DataTable(); System.Collections.ArrayList ParaColumns = new System.Collections.ArrayList(); if (_dt.Columns.Contains(_Column_1_Name)) { string clName = _Column_1_Name; System.Type clType = _dt.Columns[_Column_1_Name].DataType;    //可能有问题 newdt.Columns.Add(clName, clType); //增加列 } if (_dt.Columns.Contains(_Column_2_Name)) { string clName = _Column_2_Name; System.Type clType = _dt.Columns[_Column_2_Name].DataType; newdt.Columns.Add(clName, clType); //增加列 } Add_Rows(ref newdt, _dt.Rows.Count); //增加空行 //for (int i = 0; i < _dt.Rows.Count; i++) //{ // newdt.Rows[i][_Column_1_Name] = _dt.Rows[i][_Column_1_Name]; // newdt.Rows[i][_Column_2_Name] = _dt.Rows[i][_Column_2_Name]; //} for (int i = 0; i < _dt.Rows.Count; i++) { foreach (DataColumn NewColumn in newdt.Columns) ////新表中的每列 { newdt.Rows[i][NewColumn.ColumnName] = _dt.Rows[i][NewColumn.ColumnName]; } } newdt.AcceptChanges(); return newdt;//返回的查询结果 } /// /// 根据给定的列名(数组),返回新的DataTable /// /// 源数据DataTable /// 列名的数组 /// public static DataTable GetNewDataTable(ref DataTable _dt, string[] ColumnsName) { if (_dt == null) { return null; } DataTable newdt = new DataTable(); System.Collections.ArrayList ParaColumns = new System.Collections.ArrayList(); for (int i = 0; i < ColumnsName.Length; i++) { string clName = ColumnsName[i]; System.Type clType = _dt.Columns[ColumnsName[i]].DataType;    //可能有问题 newdt.Columns.Add(clName, clType); //增加列 } Add_Rows(ref newdt, _dt.Rows.Count); //增加空行 //for (int i = 0; i < _dt.Rows.Count; i++) //{ // newdt.Rows[i][_Column_1_Name] = _dt.Rows[i][_Column_1_Name]; // newdt.Rows[i][_Column_2_Name] = _dt.Rows[i][_Column_2_Name]; //} for (int i = 0; i < _dt.Rows.Count; i++) { foreach (DataColumn NewColumn in newdt.Columns) ////新表中的每列 { newdt.Rows[i][NewColumn.ColumnName] = _dt.Rows[i][NewColumn.ColumnName]; } } newdt.AcceptChanges(); return newdt;//返回的查询结果 } /// /// 复制数据,深度复制 /// /// 数据源,待复制的数据 /// 数据结构/表结构 /// 处理后的DataTable public static DataTable CopyData(DataRow[] dataSourceRow, DataTable dataStruct) { DataTable dataTable = new DataTable(); //定义表结构 DataColumn col; foreach (DataColumn column in dataStruct.Columns) { col = new DataColumn(); col.ColumnName = column.ColumnName; col.DataType = column.DataType; //add column dataTable.Columns.Add(col); } foreach (DataRow row in dataSourceRow) { DataRow tempRow = dataTable.NewRow(); foreach (DataColumn column in dataStruct.Columns) { try { tempRow[column.ColumnName] = row[column.ColumnName]; } catch { continue; } } dataTable.Rows.Add(tempRow); } return dataTable; } } #endregion #region (静态类)操作文件的工具 /// /// (静态类)操作文件的工具 /// public class FileTools { /// /// 列举出制定目录夹下的所有文件 /// /// /// public static string[] GetAllFilenNameByDir(string DirPath) { string[] FilesName = new string[System.IO.Directory.GetFiles(DirPath).Length]; int i = 0; foreach (string file in System.IO.Directory.GetFiles(DirPath)) //列举出所有文件,添加到AL { FilesName[i] = file; i = i + 1; } return FilesName; } /// /// 测试 /// /// /// public static System.Collections.ArrayList GetAllFileByDir(string DirPath) { System.Collections.ArrayList AL = new System.Collections.ArrayList(); foreach (string file in System.IO.Directory.GetFiles(DirPath)) //列举出所有文件,添加到AL { AL.Add(file); } return AL; //foreach (string dir in System.IO.Directory.GetDirectories(DirPath)) //列举出所有子文件夹,并对之调用GetAllFileByDir自己; //{ // //GetAllFileByDir(dir, ref AL); //} // void GetAllFileByDir(string DirPath,ref ArrayList AL) //{ // //列举出所有文件,添加到AL // foreach(string file in Directory.GetFiles(DirPath)) // AL.Add(file); // //列举出所有子文件夹,并对之调用GetAllFileByDir自己; // foreach(string dir in Directory.GetDirectories(DirPath)) // GetAllFileByDir(dir,ref AL); //} } /// /// 得到待打开的文件名 /// /// =null为所有文件|xml类文件="xml"|Excel文件="xls"|word文件="doc"|文本文件="txt")执行文件="exe"|图形文件="jpg|C#类文件=cs|BIN文件=bin /// public static string GetFileOpenName(string _FileType) { string strFileName = ""; System.Windows.Forms.OpenFileDialog MyOpenFileDialog = new System.Windows.Forms.OpenFileDialog(); string strFilter = "所有文件(*.*)|*.*"; if (_FileType == null) { MyOpenFileDialog.Filter = strFilter; //当前目录的显示文件类型过滤 MyOpenFileDialog.FilterIndex = 1; } else { #region 文件类型的字符串 switch (_FileType.ToLower()) { case "xml": _FileType = "xml文件(*.xml)|*.xml"; break; case "xls": _FileType = "Excel文件(*.xls)|*.xls"; break; case "doc": _FileType = "word类文件(*.doc)|*.doc"; break; case "cs": _FileType = "C#类文件(*.cs)|*.cs"; break; case "jpg": _FileType = "图形文件(*.jpg)|*.jpg"; break; case "txt": _FileType = "文本文件(*.txt)|*.txt"; break; case "exe": _FileType = "执行文件(*.exe)|*.exe"; break; case "bin": _FileType = "BIN文件(*.bin)|*.bin"; break; } #endregion strFilter = strFilter + "|" + _FileType; MyOpenFileDialog.Filter = strFilter; //当前目录的显示文件类型过滤 MyOpenFileDialog.FilterIndex = 2; } if (MyOpenFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.Cancel) { return null; } else { strFileName = MyOpenFileDialog.FileName; return strFileName; } } /// /// 得到待保存的文件名 /// /// xml类文件="xml"|Excel文件="xls"|word文件="doc"|文本文件="txt")执行文件="exe"|图形文件="jpg|C#类文件=cs|BIN文件=bin /// public static string GetFileSaveName(string _FileType) { string strFileName = ""; System.Windows.Forms.SaveFileDialog MySaveFileDialog = new System.Windows.Forms.SaveFileDialog(); string strFilter = "所有文件(*.*)|*.*"; if (_FileType == null) { MySaveFileDialog.Filter = strFilter; //当前目录的显示文件类型过滤 MySaveFileDialog.FilterIndex = 1; } else { #region 文件类型的字符串 switch (_FileType.ToLower()) { case "xml": _FileType = "xml文件(*.xml)|*.xml"; break; case "xls": _FileType = "Excel文件(*.xls)|*.xls"; break; case "doc": _FileType = "word类文件(*.doc)|*.doc"; break; case "cs": _FileType = "C#类文件(*.cs)|*.cs"; break; case "jpg": _FileType = "图形文件(*.jpg)|*.jpg"; break; case "txt": _FileType = "文本文件(*.txt)|*.txt"; break; case "exe": _FileType = "执行文件(*.exe)|*.exe"; break; case "bin": _FileType = "BIN文件(*.bin)|*.bin"; break; } #endregion strFilter = strFilter + "|" + _FileType; MySaveFileDialog.Filter = strFilter; //当前目录的显示文件类型过滤 MySaveFileDialog.FilterIndex = 2; } if (MySaveFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.Cancel) { return null; } else { strFileName = MySaveFileDialog.FileName; return strFileName; } } /// /// 文件改名 /// /// 老文件名 /// 后缀 /// public static string GetFileChangeName(string _strOldFileName, string _strPostfix) { //string _strFileName = Lonty.UC.GetFileNameString.SaveName("xls"); if (_strOldFileName == "") { return null; } int x1 = _strOldFileName.LastIndexOf("\\"); string Path = _strOldFileName.Substring(0, x1 + 1); string SaveFileName = _strOldFileName.Substring(x1 + 1, _strOldFileName.Length - x1 - 5) + _strPostfix; string strFileTypeName = _strOldFileName.Substring(_strOldFileName.Length - 4, 4).ToLower(); SaveFileName = Path + SaveFileName + strFileTypeName; return SaveFileName; //if (myExcel_1.App_ExcelSave(SaveFileName)) //{ // MessageBox.Show("文件<" + SaveFileName + ">保存成功!"); //} //else //{ // MessageBox.Show("文件<" + SaveFileName + ">保存失败!"); //} } /// /// 获取没有目录路径的文件名 /// /// /// 是否包含文件扩展名,true = 包含文件扩展名 /// 不含目录路径的文件名 public static string GetFileNameNoPath(string _strOldFileName, bool _b1) { if (_strOldFileName == "") { return null; } try { int x1 = _strOldFileName.LastIndexOf("\\"); string Path = _strOldFileName.Substring(0, x1 + 1); string SaveFileName = _strOldFileName.Substring(x1 + 1, _strOldFileName.Length - x1 - 5); if (_b1) { string strFileTypeName = _strOldFileName.Substring(_strOldFileName.Length - 4, 4).ToLower(); SaveFileName = SaveFileName + strFileTypeName; } return SaveFileName; } catch { return null; } } /// /// 把文件名中最后的的字符"PARAPOSDEF".改为"PARA" ,扩展名不变 /// /// /// public static string GetFileReName_PARAPOSDEF_PARA(string _strFileName) { //string _strFileName = Lonty.UC.GetFileNameString.SaveName("xls"); if (_strFileName == "") { return null; } int x1 = _strFileName.LastIndexOf("\\"); int x2 = _strFileName.LastIndexOf("PARAPOSDEF"); if (x2 == -1) { MessageBox.Show("打开的文件名中不包含PARAPOSDEF等字符,不符合规范!"); x2 = _strFileName.Length; } String Path = _strFileName.Substring(0, x1 + 1); //String SaveFileName = strFileName.Substring(x1 + 1, x2 - x1 -5) + "_PARA.xml"; String SaveFileName = _strFileName.Substring(x1 + 1, x2 - x1 - 2) + "_PARA"; string strFileTypeName = _strFileName.Substring(_strFileName.Length - 4, 4).ToLower(); SaveFileName = SaveFileName + strFileTypeName; SaveFileName = Path + SaveFileName; return SaveFileName; //if (myExcel_1.App_ExcelSave(SaveFileName)) //{ // MessageBox.Show("文件<" + SaveFileName + ">保存成功!"); //} //else //{ // MessageBox.Show("文件<" + SaveFileName + ">保存失败!"); //} } /// /// 将字符串保存为文件(汉字显示方式),文件名在此方法中将打开输入文件名的对话框 /// /// 要保存的字符串数据 /// true=在文件原有内容的基础上添加 false =先清空,再写 /// public static bool StringToSaveTxtFile(string _strData, bool _bAppend) { if (_strData == "") { System.Windows.Forms.MessageBox.Show("内容为空,不保存"); return false; } string FileName = SuperTools.FileTools.GetFileSaveName("txt"); //如果文件名没有扩展名就加上的扩展名 if (FileName.Length < 4 || FileName.Substring(FileName.Length - 4, 4).ToLower() != ".txt") { FileName += ".txt"; } //************************************************************* try { //System.IO.Stream MyStream = System.IO.File.OpenWrite(fName); //using (System.IO.StreamWriter MyWriter = new System.IO.StreamWriter(MyStream, Encoding.GetEncoding("gb2312"))) using (System.IO.StreamWriter MyWriter = new System.IO.StreamWriter(FileName, _bAppend, Encoding.GetEncoding("gb2312"))) { //strData = richTextBoxFor_ultraGrid_Init.Text; MyWriter.Write(_strData); MyWriter.Close(); System.Windows.Forms.MessageBox.Show("OK!文件保存完毕"); return true; } } catch (System.IO.IOException ex) { System.Windows.Forms.MessageBox.Show(ex.Message, "Simple Editor", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Exclamation); return false; }//try catch (Exception exp) { System.Console.WriteLine("保存文件错误:" + exp.Message); return false; } //try } /// /// 写数据包信息到BIN文件 /// /// 要保存的Byte数组数据 /// Bin文件计数 public static bool ByteToSaveBinFile(byte[] _byteData, long _UpdateCount) { if (_byteData == null) { return false; } string _RunPath = System.Environment.CurrentDirectory; //当前windows系统环境目录 _RunPath = System.AppDomain.CurrentDomain.BaseDirectory; //当前应用程序的目录 //string str8 = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;//获取模块的完整路径。 try { if (System.IO.Directory.Exists(_RunPath + "\\log") == false) { System.IO.Directory.CreateDirectory(_RunPath + "\\log"); } string FileName; string strCurrentTime = System.DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss_ms"); FileName = _RunPath + "\\log\\Log_" + _UpdateCount.ToString("00000") + "_" + strCurrentTime + ".Bin"; try { //System.IO.Stream MyStream = System.IO.File.OpenWrite(fName); //using (System.IO.StreamWriter MyWriter = new System.IO.StreamWriter(MyStream, Encoding.GetEncoding("gb2312"))) //using (System.IO.StreamWriter MyWriter = new System.IO.StreamWriter(FileName, _bAppend, Encoding.GetEncoding("gb2312"))) using (System.IO.FileStream FileStreamInf = new System.IO.FileStream(FileName, System.IO.FileMode.OpenOrCreate)) { FileStreamInf.Write(_byteData, 0, _byteData.Length); FileStreamInf.Close(); //System.Windows.Forms.MessageBox.Show("OK!文件保存完毕"); return true; } } catch (System.IO.IOException ex) { System.Windows.Forms.MessageBox.Show(ex.Message, "Lonty", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Exclamation); return false; }//try catch (Exception exp) { System.Console.WriteLine("保存日志文件文件错误:" + exp.Message); return false; } //catch } catch (System.Exception exp) { System.Console.WriteLine("写LOG日志文件文件错误:" + exp.Message); return false; } } /// /// 写日志信息到日志文件 /// /// 要保存的字符串数据 /// true=在文件原有内容的基础上添加 false =先清空,再写 public static bool StringToSaveLogFile(string _strData, bool _bAppend) { if (_strData == "") { return false; } string _RunPath = System.Environment.CurrentDirectory; //当前windows系统环境目录 _RunPath = System.AppDomain.CurrentDomain.BaseDirectory; //当前应用程序的目录 //string str8 = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;//获取模块的完整路径。 try { if (System.IO.Directory.Exists(_RunPath + "\\log") == false) { System.IO.Directory.CreateDirectory(_RunPath + "\\log"); } string FileName; string CurrentAppName = ""; if (_bAppend) { string s1 = System.Windows.Forms.Application.ExecutablePath; CurrentAppName = SuperTools.FileTools.GetFileNameNoPath(s1, false); } else { CurrentAppName = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ms"); } FileName = _RunPath + "\\log\\Log_" + CurrentAppName + ".log"; try { //System.IO.Stream MyStream = System.IO.File.OpenWrite(fName); //using (System.IO.StreamWriter MyWriter = new System.IO.StreamWriter(MyStream, Encoding.GetEncoding("gb2312"))) using (System.IO.StreamWriter MyWriter = new System.IO.StreamWriter(FileName, _bAppend, Encoding.GetEncoding("gb2312"))) { string strCurrentTime = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ms"); MyWriter.WriteLine(strCurrentTime + ":" + _strData); MyWriter.WriteLine("--------------------------------------------------------------------------------"); MyWriter.WriteLine("\r\n"); MyWriter.Close(); //System.Windows.Forms.MessageBox.Show("OK!文件保存完毕"); return true; } } catch (System.IO.IOException ex) { System.Windows.Forms.MessageBox.Show(ex.Message, "Lonty", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Exclamation); return false; }//try catch (Exception exp) { System.Console.WriteLine("保存日志文件文件错误:" + exp.Message); return false; } //catch } catch (System.Exception exp) { System.Console.WriteLine("写LOG日志文件文件错误:" + exp.Message); return false; } } /// /// 更改文件的只读属性,以便可以修改了内容的文件可以覆盖 /// /// 目录路径The fully qualified path to the file. public static void ChangeFileAttributesToWritable(string filePath) { //namespace Microsoft.Practices.EnterpriseLibrary.Common //ArgumentValidation.CheckForNullReference(filePath, "filePath"); if (!System.IO.File.Exists(filePath)) { return; } System.IO.FileAttributes attributes = System.IO.File.GetAttributes(filePath); System.IO.FileAttributes attr = attributes | System.IO.FileAttributes.ReadOnly; if (attr == attributes) { attributes ^= System.IO.FileAttributes.ReadOnly; System.IO.File.SetAttributes(filePath, attributes); } } /// /// 检查文件是否只读 /// /// 目录路径The fully qualified path to the file. public static bool IsFileReadOnly(string filePath) { if (!System.IO.File.Exists(filePath)) { return false; } System.IO.FileAttributes attributes = System.IO.File.GetAttributes(filePath); System.IO.FileAttributes attr = attributes | System.IO.FileAttributes.ReadOnly; if (attr == attributes) { return true; } return false; } /* /// /// Creat a zero byte length file in the specified path. /// /// /// The absolute path to the file to create. /// /// /// is a reference (Nothing in Visual Basic). /// /// /// The caller does not have the required permission.para> /// -or- /// specified a file that is read-only. /// /// /// is a zero-length string, contains only white space, or contains one or more invalid characters as defined by . /// /// /// /// is in an invalid format. /// /// /// */ /// /// 创建空文件 /// /// public static void CreateZeroByteFile(string filePath) { //namespace Microsoft.Practices.EnterpriseLibrary.Common //ArgumentValidation.CheckForNullReference(filePath, "filePath"); using (System.IO.File.Create(filePath)) { } } /// /// 在程序中运行批处理命令 /// /// /// public static void RunBATcommand(string strCMD, string strCMD_s) { //声明一个程序信息类 System.Diagnostics.ProcessStartInfo Info = new System.Diagnostics.ProcessStartInfo(); Info.FileName = strCMD; //设置外部程序名 Info.Arguments = strCMD_s; //设置外部程序的启动参数(命令行参数)为test.txt Info.WorkingDirectory = "C:\\DataLog\\"; //设置外部程序工作目录为 C:\DataLog System.Diagnostics.Process Proc; //声明一个程序类 try //启动外部程序 { Proc = System.Diagnostics.Process.Start(Info); } catch (System.ComponentModel.Win32Exception e) { Console.WriteLine("系统找不到指定的批处理文件。\r{0}", e); return; } Console.WriteLine("外部程序的开始执行时间:{0}", Proc.StartTime); //打印出外部程序的开始执行时间 Proc.WaitForExit(8000); //等待3秒钟 //如果这个外部程序没有结束运行则对其强行终止 if (Proc.HasExited == false) { Console.WriteLine("由主程序强行终止外部程序的运行!"); Proc.Kill(); } else { Console.WriteLine("由外部程序正常退出!"); } Console.WriteLine("外部程序的结束运行时间:{0}", Proc.ExitTime); Console.WriteLine("外部程序在结束运行时的返回值:{0}", Proc.ExitCode); } } #endregion }