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
}