using Microsoft.Office.Interop.Excel;
using System;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
namespace ComTest
{
public class MSExcel
{
//Excel重要元素節點
private Microsoft.Office.Interop.Excel.Application app;
private Workbooks workbooks;
private Workbook workbook;
private string excelPath;
public MSExcel(string excelPath)
{
init();
this.excelPath = excelPath;
}
//Excel
private void init()
{
app = new Microsoft.Office.Interop.Excel.Application();
app.Visible = false;
workbooks = app.Workbooks;
}
//載入Excel
public bool LoadExcel()
{
workbook = workbooks.Open(excelPath);
return !workbook.ReadOnly;
}
//創建Excel
public void CreateExcel(string worksheetName)
{
workbook = workbooks.Add(true);
((Worksheet)workbook.Worksheets[1]).Name = worksheetName;
workbook.SaveAs(excelPath);
}
//強制殺掉Excel的所有進程
public void KillExcel()
{
Close();
Dispose();
Process[] procs = Process.GetProcessesByName("excel");
foreach (Process pro in procs)
{
pro.Kill();
}
init();
LoadExcel();
Save();
Close();
Dispose();
init();
LoadExcel();
}
//判斷指定名稱的工作表是否存在
public bool IsWorksheetExist(string worksheetName)
{
foreach (Worksheet worksheet in workbook.Worksheets)
{
if (worksheet != null && worksheet.Name != null && worksheet.Name == worksheetName)
{
return true;
}
}
return false;
}
//添加指定名稱工作表
public void AddWorksheet(string worksheetName)
{
workbook.Worksheets.Add(Type.Missing, workbook.Worksheets[workbook.Worksheets.Count], 1, Type.Missing);
((Worksheet)workbook.Worksheets[workbook.Worksheets.Count]).Name = worksheetName;
workbook.Save();
}
//獲取指定名稱的工作表
public Worksheet GetWorksheet(string worksheetName)
{
foreach(Worksheet worksheet in workbook.Worksheets)
{
if(worksheet!=null && worksheet.Name!=null && worksheet.Name==worksheetName)
{
return worksheet;
}
}
return null;
}
//Excel文檔保存
public void Save()
{
workbook.Save();
}
//Excel文檔另存爲
public void SaveAs()
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "excel files (*.xls)|*.xls";
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
workbook.SaveCopyAs(saveFileDialog.FileName);
}
}
//關閉Excel文檔
public void Close()
{
if (workbook != null)
{
workbook.Close();
workbook = null;
}
}
//釋放當前Excel進程
public void Dispose()
{
if (workbooks != null)
{
workbooks.Close();
workbooks = null;
}
if (app != null)
{
app.Quit();
app = null;
}
}
public class MSSheet
{
private Worksheet worksheet;
private int lastRow = 1;
private int lastCol = 1;
public int MaxRow
{
get
{
return worksheet.UsedRange.Rows.Count;
}
}
public MSSheet(Worksheet worksheet)
{
this.worksheet = worksheet;
lastRow = worksheet.UsedRange.Rows.Count;
string value = null;
for (int i = worksheet.UsedRange.Columns.Count; i > 0; i++)
{
value = ((Range)(worksheet.Cells[1, i])).Text.ToString();
if (value != null || value != "")
{
lastCol = i;
break;
}
}
}
//根據指定名稱尋找第一行中與之內容相同的表格所在的列
public int GetColIndexByHeaderName(string colName)
{
int count = worksheet.UsedRange.Columns.Count + 1;
for (int i = 1; i < count; i++)
{
if (((Range)(worksheet.Cells[1, i])).Text.ToString() == colName)
{
return i;
}
}
worksheet.Cells[1, count] = colName;
return count;
}
//添加一行
public void AddRow()
{
lastRow += 1;
}
//添加一個元素
public void AddCell(object data)
{
lastCol += 1;
write(lastRow, lastCol, false, data, Color.Transparent);
}
//添加一個指定背景顏色的元素
public void AddCell(object data,Color color)
{
lastCol += 1;
write(lastRow, lastCol, false, data, color);
}
//添加一個超鏈接
public void AddHyperlink(object data)
{
lastCol += 1;
write(lastRow, lastCol, true, data, Color.Transparent);
}
//添加一個指定背景顏色的超鏈接
public void AddHyperlink(object data, Color color)
{
lastCol += 1;
write(lastRow, lastCol, true, data, color);
}
//指定行和列確定表格位置,寫入內容
public void Write(int rowIndex, int colIndex, object data)
{
write(rowIndex, colIndex, false, data, Color.Transparent);
}
//指定行和列確定表格位置,指定背景顏色寫入內容
public void Write(int rowIndex, int colIndex, object data, Color color)
{
write(rowIndex, colIndex, false, data, color);
}
//指定行和列確定表格位置,寫入超鏈接
public void WriteHyperlink(int rowIndex, int colIndex, object data)
{
write(rowIndex, colIndex, true, data, Color.Transparent);
}
//指定行和列確定表格位置,指定背景顏色寫入超鏈接
public void WriteHyperlink(int rowIndex, int colIndex, object data, Color color)
{
write(rowIndex, colIndex, true, data, color);
}
//寫
private void write(int rowIndex, int colIndex, bool isHyperlink, object data, Color color)
{
Range range = (Range)worksheet.Cells[rowIndex, colIndex];
if (isHyperlink)
{
worksheet.Hyperlinks.Add(range, data.ToString());
}
else
{
range.Value2 = data.ToString();
}
if (color != Color.Transparent)
{
range.Interior.Color = System.Drawing.ColorTranslator.ToOle(color);
}
}
//讀
public string Read(int rowIndex, int colIndex)
{
return ((Range)(worksheet.Cells[rowIndex, colIndex])).Text.ToString();
}
}
}
}
Excel操控方法之Com組件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.