这是我的CAD二次开发程序中的操作excel的部分,特此分享
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.Data.OleDb;
namespace TkDraw
{
public class CExcel
{
Excel.Application _myExcel;
Excel.Workbook _myBook;
string _myFileName;
public CExcel()
{
_mStrFileS = "";
_mStrFileTo = "";
_myBook = null;
_myExcel = null;
}
/// <summary>
/// 显示Excel
/// </summary>
public void ShowExcel()
{
_myExcel.Visible = true;
}
/// <summary>
/// 重命名工作表
/// </summary>
/// <param name="sheetNum">工作表序号,从左到右,从1开始</param>
/// <param name="newSheetName">新的工作表名</param>
public void ReNameSheet(int sheetNum, string newSheetName)
{
Excel.Worksheet worksheet = (Excel.Worksheet)_myExcel.Worksheets[sheetNum];
worksheet.Name = newSheetName;
}
/// <summary>
/// 重命名工作表
/// </summary>
/// <param name="oldSheetName">原有工作表名</param>
/// <param name="newSheetName">新的工作表名</param>
public void ReNameSheet(string oldSheetName, string newSheetName)
{
Excel.Worksheet worksheet = (Excel.Worksheet)_myExcel.Worksheets[oldSheetName];
worksheet.Name = newSheetName;
}
/// <summary>
/// 新建工作表
/// </summary>
/// <param name="sheetName">工作表名</param>
public void CreateWorkSheet(string sheetName)
{
Excel.Worksheet newWorksheet = (Excel.Worksheet)_myBook.Worksheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);
newWorksheet.Name = sheetName;
}
/// <summary>
/// 激活工作表
/// </summary>
/// <param name="sheetName">工作表名</param>
public void ActivateSheet(string sheetName)
{
Excel.Worksheet worksheet = (Excel.Worksheet)_myExcel.Worksheets[sheetName];
worksheet.Activate();
}
/// <summary>
/// 激活工作表
/// </summary>
/// <param name="sheetNum">工作表序号</param>
public void ActivateSheet(int sheetNum)
{
Excel.Worksheet worksheet = (Excel.Worksheet)_myExcel.Worksheets[sheetNum];
worksheet.Activate();
}
/// <summary>
/// 打开一个存在的Excel文件
/// </summary>
/// <param name="fileName">Excel完整路径加文件名</param>
public void Open(string fileName)
{
_myExcel = new Excel.Application();
_myBook = _myExcel.Workbooks.Add(fileName);
_myFileName = fileName;
}
#region 私有成员
private string GetColumnName(int number)
{
int h, l;
h = number / 26;
l = number % 26;
if (l == 0)
{
h -= 1;
l = 26;
}
string s = GetLetter(h) + GetLetter(l);
return s;
}
private string GetLetter(int number)
{
switch (number)
{
case 1:
return "A";
case 2:
return "B";
case 3:
return "C";
case 4:
return "D";
case 5:
return "E";
case 6:
return "F";
case 7:
return "G";
case 8:
return "H";
case 9:
return "I";
case 10:
return "J";
case 11:
return "K";
case 12:
return "L";
case 13:
return "M";
case 14:
return "N";
case 15:
return "O";
case 16:
return "P";
case 17:
return "Q";
case 18:
return "R";
case 19:
return "S";
case 20:
return "T";
case 21:
return "U";
case 22:
return "V";
case 23:
return "W";
case 24:
return "X";
case 25:
return "Y";
case 26:
return "Z";
default:
return "";
}
}
#endregion
/// <summary>
/// 读取指定单元格数据
/// </summary>
/// <param name="row">行序号</param>
/// <param name="column">列序号</param>
/// <returns>该格的数据</returns>
public string ReadData(int row, int column)
{
Excel.Range range = _myExcel.get_Range(_myExcel.Cells[row, column], _myExcel.Cells[row, column]);
return range.Text.ToString();
}
public static System.Data.DataTable ReadExcel(string strFileName)
{
System.Data.DataTable dt = new System.Data.DataTable();
string strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source =" + strFileName + ";Extended Properties = Excel 8.0";
OleDbConnection oleConnection = new OleDbConnection(strConnection);
try
{
oleConnection.Open();
OleDbCommand myCommand = oleConnection.CreateCommand();
myCommand.CommandText = "select * from [sheet1$]";
OleDbDataAdapter myAdapter = new OleDbDataAdapter();
myAdapter.SelectCommand = myCommand;
myAdapter.Fill(dt);
}
catch (System.Exception)
{
throw new ApplicationException("读取数据源文件时出错");
}
finally
{
oleConnection.Close();
}
return dt;
}
public static void KillProcess()
{
try
{
foreach (Process process in Process.GetProcessesByName("EXCEL"))
{
if (!process.CloseMainWindow())
{
process.Kill();
}
}
}
catch (Exception exception)
{
throw exception;
}
}
public static bool Copy(string strPathSource, string strPathTo)
{
if (!System.IO.File.Exists(strPathSource))
{
return false;
}
System.IO.FileStream fstr = new System.IO.FileStream(strPathSource, System.IO.FileMode.Open);
int iLen = (int)fstr.Length;
byte[] bf = new byte[iLen];
fstr.Read(bf, 0, iLen);
fstr.Close();
System.IO.FileStream fstD = new System.IO.FileStream(strPathTo, System.IO.FileMode.Create);
fstD.Write(bf, 0, iLen);
fstD.Close();
return true;
}
string _mStrFileS;
string _mStrFileTo;
bool _mBVisble;
public bool SetPath(string strPathS, string strPathTo, bool bVisble)
{
if (System.IO.File.Exists(strPathS))
{
_mStrFileS = strPathS;
_mStrFileTo = strPathTo;
CExcel.Copy(strPathS, strPathTo);
_mBVisble = bVisble;
return true;
}
return false;
}
/// <summary>
/// 删除sheet 不包含strsHave的项目
/// </summary>strsHave
/// <param name="strsHave"></param>
public void DeleteSheet(List<string> strsHave)
{
object missing = System.Reflection.Missing.Value;
if (_myBook == null)
{
_myExcel = new Excel.Application();
_myBook = _myExcel.Application.Workbooks.Open(_mStrFileTo, missing, missing, missing, missing,
missing, missing, missing, missing, missing, missing, missing, missing);
}
try
{
_myExcel.Visible = false;
foreach (Excel.Worksheet sh in _myBook.Sheets)
{
if (!strsHave.Contains(sh.Name))
{
sh.Visible = Excel.XlSheetVisibility.xlSheetHidden;
}
}
}
catch
{
}
}
public void MageCell(int iStRow, int iStCol, int iLen)
{
object oo = false;
_myExcel.get_Range(_myExcel.Cells[iStRow, iStCol], _myExcel.Cells[iStRow, iStCol + iLen]).Merge(oo);
}
public void TextSytle(int iStRow, int iStCol, string strSheet, string strSytleName)
{
object missing = System.Reflection.Missing.Value;
if (_myBook == null)
{
_myExcel = new Excel.Application();
_myBook = _myExcel.Application.Workbooks.Open(_mStrFileTo, missing, missing, missing, missing,
missing, missing, missing, missing, missing, missing, missing, missing);
}
for (int i = 1; i <= _myBook.Worksheets.Count; i++)
{
Excel._Worksheet ews = (Excel._Worksheet)_myBook.Worksheets.get_Item(i);
if (ews.Name == strSheet)
{
ews.Activate();
break;
}
}
_myExcel.get_Range(_myExcel.Cells[iStRow, iStCol], _myExcel.Cells[iStRow, iStCol]).Font.Name = strSytleName; //行高
}
public void TextHigh(int iStRow, int iStCol, string strSheet, double dTextHigh)
{
object missing = System.Reflection.Missing.Value;
if (_myBook == null)
{
_myExcel = new Excel.Application();
_myBook = _myExcel.Application.Workbooks.Open(_mStrFileTo, missing, missing, missing, missing,
missing, missing, missing, missing, missing, missing, missing, missing);
}
for (int i = 1; i <= _myBook.Worksheets.Count; i++)
{
Excel._Worksheet ews = (Excel._Worksheet)_myBook.Worksheets[i];
if (ews.Name == strSheet)
{
ews.Activate();
break;
}
}
_myExcel.get_Range(_myExcel.Cells[iStRow, iStCol], _myExcel.Cells[iStRow, iStCol]).RowHeight = dTextHigh; //行高
}
public void FillCell(int iStRow, int iStCol, string strShet, string strv)//开始行,开始列,表名,字符串数据
{
int i = 0;
object missing = System.Reflection.Missing.Value;
try
{
if (_myBook == null)
{
_myExcel = new Excel.Application();
_myBook = _myExcel.Application.Workbooks.Open(_mStrFileTo, missing, missing, missing, missing,
missing, missing, missing, missing, missing, missing, missing, missing);
_myExcel.Visible = _mBVisble;
}
for (i = 1; i <= _myBook.Worksheets.Count; i++)
{
Excel._Worksheet ews = (Excel._Worksheet)_myBook.Worksheets[i];
if (ews.Name == strShet) //如果表名相符,则激活此表
{
ews.Activate();
break;
}
}
_myExcel.Cells[iStRow, iStCol] = strv;
_myExcel.Visible = _mBVisble;
}
catch
{
throw new Exception("错误");
}
}
public void Close()
{
if (_myBook != null)
{
_myBook.Save();
_myExcel.Quit();
//throw new Exception("错误");
}
}
public void Out(int iStRow, int iStCol, string strShet, System.Data.DataTable dt)
{
int i = 0;
object missing = System.Reflection.Missing.Value;
//打开新文件
try
{
if (_myBook == null)
{
_myExcel = new Excel.Application();
_myBook = _myExcel.Application.Workbooks.Open(_mStrFileTo, missing, missing, missing, missing,
missing, missing, missing, missing, missing, missing, missing, missing);
}
_myExcel.Visible = _mBVisble;
for (i = 1; i <= _myBook.Worksheets.Count; i++)
{
Excel._Worksheet ews = (Excel._Worksheet)_myBook.Worksheets[i];
if (ews.Name == strShet)
{
ews.Activate();
break;
}
}
int iColC = dt.Columns.Count - 1;
int irowC = dt.Rows.Count - 1;
for (i = 0; i < dt.Rows.Count; i++)
{
if (dt.Rows[i].RowState == System.Data.DataRowState.Deleted)
{
continue;
}
for (int j = 0; j < dt.Columns.Count; j++)
{
_myExcel.Cells[iStRow + i, iStCol + j] = dt.Rows[i][j].ToString();
}
}
_myExcel.get_Range(_myExcel.Cells[iStRow, iStCol], _myExcel.Cells[iStRow + irowC, iStCol + iColC]).Cells.Borders.LineStyle = 1;
}
catch
{
Close();
throw new Exception("错误");
}
}
/// <summary>
/// 第ilen行的时候空一行
/// </summary>
/// <param name="iStRow"></param>
/// <param name="iStCol"></param>
/// <param name="strShet"></param>
/// <param name="dt"></param>
/// <param name="iLen"></param>
public void Out(int iStRow, int iStCol, string strShet, System.Data.DataTable dt, int iLen, string strVh)
{
int i = 0;
object missing = System.Reflection.Missing.Value;
//打开新文件
try
{
if (_myBook == null)
{
_myExcel = new Excel.Application();
_myBook = _myExcel.Application.Workbooks.Open(_mStrFileTo, missing, missing, missing, missing,
missing, missing, missing, missing, missing, missing, missing, missing);
}
_myExcel.Visible = _mBVisble;
for (i = 1; i <= _myBook.Worksheets.Count; i++)
{
Excel._Worksheet ews = (Excel._Worksheet)_myBook.Worksheets[i];
if (ews.Name == strShet)
{
ews.Activate();
break;
}
}
int iColC = dt.Columns.Count - 1;
int irowC = dt.Rows.Count - 1;
int icc = 0;
int iRowkk = 0;
int iCount = 0;
for (i = 0; i < dt.Rows.Count; i++)
{
if (dt.Rows[i].RowState == System.Data.DataRowState.Deleted)
{
continue;
}
for (int j = 0; j < dt.Columns.Count; j++)
{
if (iCount == iLen)
{
_myExcel.get_Range(_myExcel.Cells[iStRow + i + icc - iLen, iStCol], _myExcel.Cells[iStRow + i + icc - 1, iStCol + iColC]).Cells.Borders.LineStyle = 1;
MageCell(iStRow + i + icc, iStCol, dt.Columns.Count - 1);
_myExcel.Cells[iStRow + i + icc, iStCol] = strVh;
_myExcel.get_Range(_myExcel.Cells[iStRow + i + icc, iStCol], _myExcel.Cells[iStRow + i + icc, iStCol]).HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;
iRowkk = iStRow + i + icc;
iCount = 0;
icc += 1;
}
_myExcel.Cells[iStRow + i + icc, iStCol + j] = dt.Rows[i][j].ToString();
}
if (i == dt.Rows.Count - 1 && iCount < iLen)
{
if (icc == 0)
{
iRowkk = iStRow - 1;
}
_myExcel.get_Range(_myExcel.Cells[iRowkk + 1, iStCol], _myExcel.Cells[iRowkk + iLen, iStCol + iColC]).Cells.Borders.LineStyle = 1;
//iStRow iRowkk
MageCell(iRowkk + iLen + 1, iStCol, dt.Columns.Count - 1);
_myExcel.Cells[iRowkk + iLen + 1, iStCol] = strVh;
_myExcel.get_Range(_myExcel.Cells[iRowkk + iLen + 1, iStCol], _myExcel.Cells[iRowkk + iLen + 1, iStCol]).HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;
}
iCount++;
}
}
catch
{
Close();
throw new Exception("错误");
}
}
}
}