简介
用一个小范例示范如何在C#中操作Excel
代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Excel = Microsoft.Office.Interop.Excel;
namespace TestExcel
{
public class CBExcel
{
Excel.Application xlApp; // 声明需要的 Exccel Application 变量
Excel.Workbook xlWorkBook; // 声明 work book
Excel.Worksheet xlWorkSheet;// 声明 excel 的sheet
object misValue = System.Reflection.Missing.Value;
public CBExcel()
{
}
// 设定数据
public void SetData(int i, int j, string data)
{
xlWorkSheet.Cells[i, j] = data;
}
// 插入一个图表到excel分页中
public void SetChart(string start, string end, Excel.XlChartType type)
{
Excel.Range chartRange;
Excel.ChartObjects xlCharts = (Excel.ChartObjects)xlWorkSheet.ChartObjects(Type.Missing); // 建立图表
Excel.ChartObject myChart = (Excel.ChartObject)xlCharts.Add(10, 80, 300, 250); //加入图表及设定大小
Excel.Chart chartPage = myChart.Chart;
chartRange = xlWorkSheet.get_Range(start, end); // 设定图表数据的开始与结尾
chartPage.SetSourceData(chartRange, misValue);
chartPage.ChartType = type; // 设定图表的样式
}
// 释放用的函数
private void releaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch
{
obj = null;
}
finally
{
GC.Collect();
}
}
// 创建一个excel
public void Create()
{
xlApp = new Excel.ApplicationClass(); // 创建一个excel
xlWorkBook = xlApp.Workbooks.Add(misValue);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); // 取得第一页的分页
}
// 储存excel
public void SaveAs()
{
// 这样储存会跳出一个另存文件视窗
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();
}
public void Release()
{
// 释放用到的excel实例
releaseObject(xlWorkSheet);
releaseObject(xlWorkBook);
releaseObject(xlApp);
}
}
}
这是一个经过简单封装过的类,将一些操作的部份封装在一个类中,好方便使用。
使用的代码
private void button1_Click(object sender, EventArgs e)
{
CBExcel excel = new CBExcel(); // 创建CBExcel类
excel.Create(); // 建立Excel
excel.SetData(1, 1, ""); // 设定数据
excel.SetData(1, 2, "Student1");
excel.SetData(1, 3, "Student2");
excel.SetData(1, 4, "Student3");
excel.SetData(2, 1, "Term1");
excel.SetData(2, 2, "80");
excel.SetData(2, 3, "65");
excel.SetData(2, 4, "45");
excel.SetData(3, 1, "Term2");
excel.SetData(3, 2, "81");
excel.SetData(3, 3, "61");
excel.SetData(3, 4, "41");
excel.SetData(4, 1, "Term3");
excel.SetData(4, 2, "82");
excel.SetData(4, 3, "62");
excel.SetData(4, 4, "42");
excel.SetChart("A1", "D4", Excel.XlChartType.xlLine); // 设定图表样式与开始结束位置
excel.SaveAs(); // 储存Excel
excel.Release();// 释放内存
}
excel输出结果
范例下载
http://download.csdn.net/detail/cloudhsu/5072683
2013/02/20新增
支持Excel与CSV数据汇出的代码
因为在实际的需求中,公司中的一些计算机可能不会安装Excel,为了让汇出的工作能正常运作,因此我做了下列的修正
接口:IExcel用来作抽象
interface IExcel
{
void Create();
void SetData(int i, int j, string data);
void SaveAs();
void Release();
}
CBExcel的部份则实践IExcel接口
public class CBExcel : IExcel
{
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
object misValue = System.Reflection.Missing.Value;
const string ChartStart = "A1";
string m_ChartEnd;
int m_MaxI;
int m_MaxJ;
public CBExcel()
{
m_ChartEnd = "A1";
m_MaxI = -1;
m_MaxJ = -1;
}
public void SetData(int i, int j, string data)
{
xlWorkSheet.Cells[i, j] = data;
CheckChartEnd(i, j);
}
private void CheckChartEnd(int i, int j)
{
if (m_MaxI <= i)
m_MaxI = i;
if (m_MaxJ <= j)
m_MaxJ = j;
const int a = 0x41;
int word = a + j - 1;
m_ChartEnd = string.Format("{0}{1}", Convert.ToChar(word), m_MaxI);
}
public void SetChart(Excel.XlChartType type)
{
Excel.Range chartRange;
Excel.ChartObjects xlCharts = (Excel.ChartObjects)xlWorkSheet.ChartObjects(Type.Missing);
Excel.ChartObject myChart = (Excel.ChartObject)xlCharts.Add(500, 80, 350, 350);
Excel.Chart chartPage = myChart.Chart;
chartRange = xlWorkSheet.get_Range(ChartStart, m_ChartEnd);
chartPage.SetSourceData(chartRange, misValue);
chartPage.ChartType = type;
}
public void SetChart(string start, string end, Excel.XlChartType type)
{
Excel.Range chartRange;
Excel.ChartObjects xlCharts = (Excel.ChartObjects)xlWorkSheet.ChartObjects(Type.Missing);
Excel.ChartObject myChart = (Excel.ChartObject)xlCharts.Add(500, 80, 350, 350);
Excel.Chart chartPage = myChart.Chart;
chartRange = xlWorkSheet.get_Range(start, end);
chartPage.SetSourceData(chartRange, misValue);
chartPage.ChartType = type;
}
private void releaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch
{
obj = null;
}
finally
{
GC.Collect();
}
}
public void Create()
{
xlApp = new Excel.ApplicationClass();
xlWorkBook = xlApp.Workbooks.Add(misValue);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
}
public void SaveAs()
{
SetChart(Excel.XlChartType.xlLine);
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();
}
public void Release()
{
releaseObject(xlWorkSheet);
releaseObject(xlWorkBook);
releaseObject(xlApp);
}
}
额外在实践一个CBExcelCSV
我用最偷懒的实践手法,直接开个够大的内存来存数据
public class CBExcelCSV : IExcel
{
List<string[]> m_data = new List<string[]>();
const int MAX_COLUMN = 150;
const int MAX_LINE = 2000;
int m_MaxLine;
int m_MaxColumn;
#region IExcel Members
public void Create()
{
m_MaxColumn = -1;
m_MaxLine = MAX_LINE;
for (int i = 0; i < MAX_LINE; i++)
{
m_data.Add(new string[MAX_COLUMN]);
}
}
public void SetData(int i, int j, string data)
{
if (i-1 >= m_MaxLine)
{
m_data.Add(new string[MAX_COLUMN]);
m_MaxLine++;
}
if (m_MaxColumn < j)
{
m_MaxColumn = j;
}
m_data[i-1][j-1] = data;
}
public void SaveAs()
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < m_data.Count; i++ )
{
sb.Append(m_data[i][0]);
for (int j = 1; j < m_MaxColumn; j++)
{
sb.Append(",");
sb.Append(m_data[i][j]);
}
sb.Append("\r\n");
}
save(sb.ToString());
}
void save(string data)
{
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "csv files (*.csv)|*.csv|All files (*.*)|*.*";
saveFileDialog1.FilterIndex = 1;
saveFileDialog1.RestoreDirectory = true;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
string fileName = saveFileDialog1.FileName;
File.WriteAllText(fileName, data);
}
}
public void Release()
{
}
#endregion
}
再实践一个CBExcelWrapper来封装,里面有一个IExcel成员,并将所有的执行交给IExcel的实例执行。
public class CBExcelWrapper : IExcel
{
IExcel excel;
bool m_IsExcelInstalled;
public CBExcelWrapper()
{
m_IsExcelInstalled = CheckExcelInstalled();
// 有安装Excel就使用CBExcel类,没有则使用CBExcelCSV类
if(m_IsExcelInstalled)
{
excel = new CBExcel();
}
else
{
excel = new CBExcelCSV();
}
}
bool CheckExcelInstalled()
{
// 这一段代码的重点就是判断到底有没有装Excel
bool installed = false;
Type officeType = Type.GetTypeFromProgID("Excel.Application");
if (officeType != null)
{
installed = true;
}
return installed;
}
#region IExcel Members
public void Create()
{
excel.Create();
}
public void SaveAs()
{
excel.SaveAs();
}
public void Release()
{
excel.Release();
}
public void SetData(int i, int j, string data)
{
excel.SetData(i, j, data);
}
#endregion
}
分享到:
相关推荐
用C#操作Excel以及产生Chart图的代码范例
使用C#和Excel进行报表开发,生成统计图(Chart)
b/s模式下 c#通模版操作excel对象处理带有chart的报表
C#导入Excel操作类 插入excel折线图 各种图表 好多个例子
如何用C#在Excel中生成图表C#源程序 exc.Charts.Add(oMissing,oMissing,1,oMissing); exc.ActiveChart.ChartType=Excel.XlChartType.xlColumnClustered; exc.ActiveChart.SetSourceData(worksheet.get_...
chart图表导出到excel
c# 导出chart图片excuel
该代码实现使用VS2010里面的Chart控件,制作象excel那样的数据图形,在excel中可以对数据进行简单的作图,但是如果这些数据在不同的文件里,打开之后再作图很麻烦,如果结果.Net文件打开的操作,比较方便。
C#读取excel、csv等文件到chart折线图,有详细的代码注释
先读取excel数据,然后用chart组件来根据数据绘制曲线图
NPOI,c#操作excel的建议组建dll(包括详细使用手册) NPOI.DLL文件 OPI使用手册.doc 目录 1. 认识NPOI 2. 使用NPOI生成xls文件 2.1 创建基本内容 2.1.1 创建Workbook和Sheet 2.1.2 创建...
C#利用EPPlus操作库对EXCEL进行的创建,修改,删除,合并单元格,合并表格,到处数据等等操作源码。
C# excel自动添加数据和绘图,excel界面可见,亲测可用
FTP操作类、导出Excel、配置文件操作类、 文件操作类、弹出消息类、XML操作类、 弹出消息类、分词辅助类、时间操作类、 汉字转拼音、压缩解压缩、条形码、 正则表达式、日历、上传下载、 视频转换类、随机数类、条形...
vs2010+sql2005实现winform中把表数据导出到Excel,导出时可以自定义保存路径;项目中包含详细的实现代码和数据库。
C# 常用类库合集 包括:Chart图形,cmd,Cookie&Session,Excel操作类,FTP操作类,H5-微信,JSON操作,JS操作,obj,packages,Properties,XML操作类,上 传下载,二维码操作类,加密解密,图片,字符串,异步线程,文件操作类,日志,...
使用VSTO 2005,可以为Excel添加各种图形。
C# 读取Excel数据,模拟 STM32 ADC波形采集系统 Chart图表 以Visual Studio 2019为开发环境,结合串口通信串口通信技术开发出一套ADC采集上位机系统。 系统包括Excel数据库读写模块、串口通信模块、生成Chart图表 ...
实时、历史曲线绘制实时、历史曲线绘制实时、历史曲线绘制实时、历史曲线绘制实时、历史曲线绘制