C#中使用Excel

excel

在做一个小项目,需要把一些查询结果导出到Excel,找了一些资料,自己也总结出了一点方法,与大家共享。

一、首先简要描述一下如何操作Excel表

先要添加对Excel的引用。选择项目-〉添加引用-〉COM-〉添加Microsoft Excel 9.0。(不同的office讲会有不同版本的dll文件)。
using Excel;
using System.Reflection;

//产生一个Excel.Application的新进程
Excel.Application app = new Excel.Application();
if (app == null)
{
statusBar1.Text = "ERROR: EXCEL couldn''t be started!";
return ;
}

app.Visible = true; //如果只想用程序控制该excel而不想让用户操作时候,可以设置为false
app.UserControl = true;

Workbooks workbooks =app.Workbooks;

_Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet); //根据模板产生新的workbook
// _Workbook workbook = workbooks.Add("c:\\a.xls"); //或者根据绝对路径打开工作簿文件a.xls

Sheets sheets = workbook.Worksheets;
_Worksheet worksheet = (_Worksheet) sheets.get_Item(1);
if (worksheet == null)
{
statusBar1.Text = "ERROR: worksheet == null";
return;
}

// This paragraph puts the value 5 to the cell G1
Range range1 = worksheet.get_Range("A1", Missing.Value);
if (range1 == null)
{
statusBar1.Text = "ERROR: range == null";
return;
}
const int nCells = 2345;
range1.Value2 = nCells;

二、示例程序

在Visual Studio .NET中建立一个C# WinForm工程.
添加Microsoft Excel Object Library引用:
右键单击Project , 选“添加引用”
在COM 标签项,选中 locate Microsoft Excel Object Library
点确定按钮完成添加引用。 On the View menu, select Toolbox to display the Toolbox. Add two buttons and a check box to Form1.
在Form1上添加一个button1,双击 Button1,添加click事件的代码.把数组里的数据填到Excel表格。
首先添加引用:

using System.Reflection;
using Excel = Microsoft.Office.Interop.Excel;

声明两个类的成员变量
Excel.Application objApp;
Excel._Workbook objBook;

private void button1_Click(object sender, System.EventArgs e)
{
Excel.Workbooks objBooks;
Excel.Sheets objSheets;
Excel._Worksheet objSheet;
Excel.Range range;

try
{
// Instantiate Excel and start a new workbook.
objApp = new Excel.Application();
objBooks = objApp.Workbooks;
objBook = objBooks.Add( Missing.Value );
objSheets = objBook.Worksheets;
objSheet = (Excel._Worksheet)objSheets.get_Item(1);

//Get the range where the starting cell has the address
//m_sStartingCell and its dimensions are m_iNumRows x m_iNumCols.
range = objSheet.get_Range("A1", Missing.Value);
range = range.get_Resize(5, 5);

if (this.FillWithStrings.Checked == false)
{
//Create an array.
double[,] saRet = new double[5, 5];

//Fill the array.
for (long iRow = 0; iRow < 5; iRow++)
{
for (long iCol = 0; iCol < 5; iCol++)
{
//Put a counter in the cell.
saRet[iRow, iCol] = iRow * iCol;
}
}

//Set the range value to the array.
range.set_Value(Missing.Value, saRet );
}

else
{
//Create an array.
string[,] saRet = new string[5, 5];

//Fill the array.
for (long iRow = 0; iRow < 5; iRow++)
{
for (long iCol = 0; iCol < 5; iCol++)
{
//Put the row and column address in the cell.
saRet[iRow, iCol] = iRow.ToString() + "|" + iCol.ToString();
}
}

//Set the range value to the array.
range.set_Value(Missing.Value, saRet );
}

//Return control of Excel to the user.
objApp.Visible = true;
objApp.UserControl = true;
}
catch( Exception theException )
{
String errorMessage;
errorMessage = "Error: ";
errorMessage = String.Concat( errorMessage, theException.Message );
errorMessage = String.Concat( errorMessage, " Line: " );
errorMessage = String.Concat( errorMessage, theException.Source );

MessageBox.Show( errorMessage, "Error" );
}
}

4.在Form1上添加一个Button2,双击 Button2,添加click事件的代码,从Excel表格读数据到数组:

private void button2_Click(object sender, System.EventArgs e)
{
Excel.Sheets objSheets;
Excel._Worksheet objSheet;
Excel.Range range;

try
{
try
{
//Get a reference to the first sheet of the workbook.
objSheets = objBook.Worksheets;
objSheet = (Excel._Worksheet)objSheets.get_Item(1);
}

catch( Exception theException )
{
String errorMessage;
errorMessage = "Can't find the Excel workbook. Try clicking Button1 " +
"to create an Excel workbook with data before running Button2.";

MessageBox.Show( errorMessage, "Missing Workbook?");

//You can't automate Excel if you can't find the data you created, so
//leave the subroutine.
return;
}

//Get a range of data.
range = objSheet.get_Range("A1", "E5");

//Retrieve the data from the range.
Object[,] saRet;
saRet = (System.Object[,])range.get_Value( Missing.Value );

//Determine the dimensions of the array.
long iRows;
long iCols;
iRows = saRet.GetUpperBound(0);
iCols = saRet.GetUpperBound(1);

//Build a string that contains the data of the array.
String valueString;
valueString = "Array Data\n";

for (long rowCounter = 1; rowCounter <= iRows; rowCounter++)
{
for (long colCounter = 1; colCounter <= iCols; colCounter++)
{

//Write the next value into the string.
valueString = String.Concat(valueString,
saRet[rowCounter, colCounter].ToString() + ", ");
}

//Write in a new line.
valueString = String.Concat(valueString, "\n");
}

//Report the value of the array.
MessageBox.Show(valueString, "Array Values");
}

catch( Exception theException )
{
String errorMessage;
errorMessage = "Error: ";
errorMessage = String.Concat( errorMessage, theException.Message );
errorMessage = String.Concat( errorMessage, " Line: " );
errorMessage = String.Concat( errorMessage, theException.Source );

MessageBox.Show( errorMessage, "Error" );
}
}

三、更多内容
《HOW TO: Transfer Data to an Excel Workbook by Using Visual C# .NET》描述了多种方式(如数组、数据集、ADO.NET、XML)把数据导到Excel表格的方法。

如果你需要把大数据量倒入到Excel 表的话,建议使用 ClipBoard(剪贴板)的方法。实现方法参看上面的连接,讨论参看:http://expert.csdn.net/Expert/topic/3086/3086690.xml

倒完数据后,在程序退出之前,如果需要结束Excel 的进程,讨论参看:http://expert.csdn.net/Expert/topic/3068/3068466.xml
讨论的结果就是:提前垃圾回收,或者杀死进程。

时间: 2025-01-30 12:54:35

C#中使用Excel的相关文章

在ASP中调用Excel画数据图表

excel|数据|图表 在ASP中调用Excel画数据图表,优势有很多,最突出的是可以输出多种形式的图形(总共有72种).以下是我写的一个通用ASP方法调用Excel画数据图表. <%'将数据图形化输出'dataArray二维数组'virtualFilePath输出图像文件名(虚拟路径)'nType显示类型Dim initTypeSub ExportPicture(dataArray,virtualFilePath,nType)Dim excelapp ' As New excel.Applic

如何在Form中嵌入Excel

excel .NET Framework1.0和1.1 都没有实现OleContainer组件.查遍MSDN,最后得了一个提示:可以使用IEBrowser来模拟OleContainer.这绝对是一个超重的实现,不过,最目前情况下,却是一个最省事的方法.本文就简单的说明一下,如何使用IEBrowser控件来嵌入Excel表格.     1. 首先,需要在工具栏中导入"Microsoft WEB 浏览器".可以在工具栏上点右键,选择"添加/移除项".然后在出现的自定义工

ASP程序中输出Excel文件实例

在asp中利用excel的一个方法是将excel文件作为一个数据库进行链接,然后的操作和对access数据库操作类似.但是这个方法不是总能有用的,应为excel不是关系型的数据库.对于一个固定格式,这个格式里有复杂的单元格合并,边框线条样式,还有图案,单元格之间还有公式关系等等的,我想最容易理解的就是在后台打开一个已有设定好模板的文件,然后在需要的地方插入数据,保存,输出... ... 这里提到的这种方法是直接建立一个excel对象,在后台可以更方便的对excel文档进行各种操作. 服务器端还必

64位Windows 7中导入excel时的问题

64位Win7中导入excel提示"因为 OLE DB 访问接口 'MICROSOFT.JET.OLEDB.4.0' 配置为在单线程单元模式下运行,所以该访问接口无法用于分布式查询." 主要原因是因为安装了32位office2010引起的. 1.首先先卸载office2010,还要记得卸载ACE2010的驱动. 2.安装office2010(64位)和ACE2010的驱动(64位) 3.把 'MICROSOFT.JET.OLEDB.4.0'改成Microsoft.ACE.OLEDB.1

在ASP.NET中使用EXCEL之权限设置

在ASP.NET中使用EXCEL,首先需要对COM组件的权限进行设置.如果未设置权限,则会报访问拒绝的错误.详细错误信息通常如下: 说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信息: System.UnauthorizedAccessException: 拒绝访问. ASP.NET 未被授权访问所请求的资源.请考虑授予 ASP.NET 请求标识访问此资源的权限.ASP.NET 有一个在应用程序没有模拟时使

在Word 2007文档中插入Excel电子表格

在Word2007文档中,用户可以插入一张拥有全部数据处理功能的Excel电子表格,从而间接增强Word2007的数据处理能力,操作步骤如下所述: 第1步,打开Word2007文档窗口,在"插入"功能区的"表格"分组中单击"表格"按钮,并在打开的菜单中选择"Excel电子表格"命令,如图2009021419所示. 图2009021419 单击"表格"按钮 第2步,在Word2007文档中插入空白Excel电

在ASP程序中打印Excel表格的新方法

 在ASP程序中打印Excel报表的新方法 目前,B/S模式(浏览器/服务器模式)成为企业网上首选的计算模式.由于B/S模式的特殊性,在C/S下相对较易实现的Excel报表打印功能在B/S下却成为一个难点.本人通过研究写了一个基于ASP程序的打印Excel报表的程序.本程序的特点是无须任何组件.   Print.asp ------------------------------------------------ <html><title>打印Excel报表</title&

如何在新窗口中打开Excel表格

Excel20102007 在一个窗口打开文件的本意原是为了节省内存.但是很多使用 Windows 7 的同学还是喜欢两个窗口一拉一靠左右排列,既便于比较,也不妨碍操作.问题是,打开多个 excel 文件时,它总是显示在一个窗口中啊,怎样在不同的窗口中打开文件呢? Excel20102007 在一个窗口打开文件的本意原是为了节省内存.但是很多使用 Windows 7 的同学还是喜欢两个窗口一拉一靠左右排列,既便于比较,也不妨碍操作.问题是,打开多个 excel 文件时,它总是显示在一个窗口中啊,

在word2007中插入Excel数据表格的方法

第1步,打开word2007文档,在"插入"功能区的"表格"分组中单击"表格"按钮,并在打开的菜单中选择"excel电子表格"命令,如图一所示. 图一 点击"表格"按钮 第2步,在word2007文档中插入空白excel电子表格以后,即可在excel电子表格中进入数据录入.数据计算等数据处理工作,其功能与操作方法跟在excel中操作完全相同,如图二所示. 图二 在word2007文档中插入excel数据表格

win7系统如何在word中插入excel公式?

  win7系统如何在word中插入excel公式?         具体方法如下: 1.找到并打开需要复制到Word里的Excel表格,如图所示,将表格内容按ctrl+c复制; 2.打开word,点击"开始"→"粘贴"→"选择性粘贴"; 3.弹出选择性粘贴对话框,选择其中的Excel工作表对象,然后点击确定; 4.即为粘贴的效果,可以自由调整大小; 5.需要编辑到表格内容的时候,鼠标右键点击:工作表对象→编辑; 文档"> 6.表