C#创建与Excel打印输出Word文档下载推荐.docx
《C#创建与Excel打印输出Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C#创建与Excel打印输出Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。
C#编程中在某些特定情况下,需要运用非受管代码,例如,要利用一个成熟的COM组件,或者调用一个API函数,或者用指针去编写实时/高效程序等。
3VisualC#中调用Excel的COM组件
一个.NET组件事实上是一个.NET下的DLL,它包含的不仅是运行程序本身,更重要的是包含这个DLL的描述信息(MetaData,即元数据),而一个COM组件是用其类库(TLB)储存其描述信息。
这些COM组件都是非受管代码,要在VisualC#中使用这些非受管代码的COM组件,就必须把他们转换成受管代码的.NET组件。
所以在用VisualC#调用Excel表格之前,必须完成从COM组件的非受管代码到受管代码的类库的转换。
3.1将Excel的COM组件转换为.NET组件在项目中打开AddReference对话框,选择COM栏,之后在COM列表中找到“MicrosoftExcel9.0ObjectLibrary”(Office2000),然后将其加入到项目的References中即可。
VisualC#.NET会自动产生相应的.NET组件文件,以后即可正常使用。
这个转换形成.NET组件不能单独使用,它不过是以前的COM组件的一个外层包装,在.NET中可以通过这个外层包装去发现原来的COM组件并调用其相应的界面函数。
所以它必须与原来的COM组件一起起作用。
3.2VisualC#打开Excel表格
事实上,在C#中使用一个经转换的COM组件和使用任何一个其它.NET组件完全一样。
可以用new关键字创建一个经转换的COM组件,然后再像使用任何一个其它C#对象一样使用这个组件对象。
在转换后的.NET组件中定义了一个命名空间Excel,在此命名空间中封装了一个类Application,这个类和启动Excel表格有非常重要的关系,在VisualC#中,只需要下列三行代码就可以完成打开Excel表格的工作,具体如下:
Excel.Applicationexcel=newExcel.Application();
//引用Excel对象
excel.Application.Workbooks.Add(true);
//引用Excel工作簿
excel.Visible=true;
//使Excel可视
但此时的Excel表格是一个空的表格,没有任何内容,下面就来介绍如何往Excel表格中输入数据。
3.3往Excel表格中输入数据
在命名空间"
Excel"
中,还定义了一个类"
Cell"
,这个类所代表的就是Excel表格中的一个单元格。
通过给"
赋值,从而实现往Excel表格中输入相应的数据,下列代码功能是打开Excel表格,并且往表格输入一些数据。
Excel.Applicationexcel=newExcel.Application();
excel.Application.Workbooks.Add(true);
excel.Cells[1,1]="
FirstRowFirstColumn"
;
excel.Cells[1,2]="
FirstRowSecondColumn"
excel.Cells[2,1]="
SecondRowFirstColumn"
excel.Cells[2,2]="
SecondRowSecondColumn"
excel.Visible=true;
3.4实例
下面实例在C#中连接Oracle数据库(Name),从表(TableName)中读取数据,并写入Excel.
stringcnString="
Provider=msdaora.1;
Datasource=Name;
"
;
cnString=cnString+"
userid=UserName;
password=Password"
try
{
OleDbConnectioncn=newOleDbConnection(cnString);
cn.Open();
strings="
select*fromName.TableName"
OleDbCommandcmd=newOleDbCommand(s,cn);
OleDbDataReaderdr=cmd.ExecuteReader();
Excel.ApplicationxlApp=newExcel.Application();
if(xlApp==null){MessageBox.Show("
Can’topenExcel!
"
);
return;
}
xlApp.Application.Workbooks.Add(true);
introw=2,fieldcount;
fieldcount=dr.FieldCount;
for(intcol=0;
col<
fieldcount;
col++)xlApp.Cells[1,col+1]=dr.GetName(col);
while(dr.Read())
col++)
xlApp.Cells[row,col+1]=dr.GetValue(col).ToString();
row++;
xlApp.Visible=true;
xlApp=null;
catch(Exceptionex){MessageBox.Show(ex.Message);
finally{cn.Close();
catch(Exceptionex){MessageBox.Show(ex.Message);
3.5安装一个使用COM组件的.NET程序
如果要将这样的程序安装运行在另一台机器上,那么除了安装运行程序外,还做三件事。
首先,是安装.NET运行系统。
因为任何一个.NET程序都不能离开.NET运行系统去独立运行。
其次,所调用的COM组件必须要安装在目标机器上。
本例中大多数目标机器上都装有MicrosoftOffice的Excel,一般不会有这个问题。
但如果是另一个用户自定义的COM组件,那么这个COM组件在运行.NET程序之前必须先安装好。
最后,转换后的.NET组件DLL文件要安装在目标机器上。
因为.NET组件不需要在WindowsRegistry中注册,所以最简单的方法是将.NET组件DLL文件拷贝到运行程序目录下。
如果此.NET组件被多个.NET程序共享,可以将其安装在.NET公用组件区中,从而可被任何一个.NET组件使用。
只有当一个.NET组件参与了事务处理时,才需要将它注册为一个COM+组件。
因为.NET仍然用传统的COM+机制来处理事务的提交、回滚等。
4小结
通过以上讨论,我们知道了在C#中,如何使用Excel的COM组件。
需要注意的是,Excel对象包含的许多内容我们没有介绍,在使用过程中需要我们不断学习。
也使我们了解了在C#中如何使用COM组件。
参考文献:
[1]刘洪成C#高级编程清华大学出版社2003.7工作187~200
C#中创建、打开、读取、写入、保存Excel的一般性代码
首先,在引用的COM中找到MicrosoftExcel11.0ObjectLibrary,添加。
usingSystem;
usingSystem.Reflection;
//引用这个才能使用Missing字段
usingExcel;
namespaceCExcel1
{
classClass1
{
[STAThread]
staticvoidMain(string[]args)
{
//创建Application对象
Excel.ApplicationxApp=newExcel.ApplicationClass();
xApp.Visible=true;
//得到WorkBook对象,可以用两种方式之一:
下面的是打开已有的文件
Excel.WorkbookxBook=xApp.Workbooks._Open(@"
D:
\Sample.xls"
Missing.Value,Missing.Value,Missing.Value,Missing.Value
,Missing.Value,Missing.Value,Missing.Value,Missing.Value
,Missing.Value,Missing.Value,Missing.Value,Missing.Value);
//xBook=xApp.Workbooks.Add(Missing.Value);
//新建文件的代码
//指定要操作的Sheet,两种方式:
Excel.WorksheetxSheet=(Excel.Worksheet)xBook.Sheets[1];
//Excel.WorksheetxSheet=(Excel.Worksheet)xApp.ActiveSheet;
//读取数据,通过Range对象
Excel.Rangerng1=xSheet.get_Range("
A1"
Type.Missing);
Console.WriteLine(rng1.Value2);
//读取,通过Range对象,但使用不同的接口得到Range
Excel.Rangerng2=(Excel.Range)xSheet.Cells[3,1];
Console.WriteLine(rng2.Value2);
//写入数据
Excel.Rangerng3=xSheet.get_Range("
C6"
Missing.Value);
rng3.Value2="
Hello"
rng3.Interior.ColorIndex=6;
//设置Range的背景色
//保存方式一:
保存WorkBook
xBook.SaveAs(@"
\CData.xls"
Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,
Excel.XlSaveAsAccessMode.xlNoChange,Missing.Value,Missing.Value,Missing.Value,
Missing.Value,Missing.Value);
//保存方式二:
保存WorkSheet
xSheet.SaveAs(@"
\CData2.xls"
Missing.Value,Missing.Value,Missing.Value,Missing.Value,
Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value);
//保存方式三
xBook.Save();
xSheet=null;
xBook=null;
xApp.Quit();
//这一句是非常重要的,否则Excel对象不能从内存中退出
xApp=null;
}
}
C#如何向EXCEL写入数据
我按着微软技术支持网上的方法写入数据:
使用“自动化”功能逐单元格传输数据,代码如下:
//StartanewworkbookinExcel.
m_objExcel=newExcel.Application();
m_objBooks=(Excel.Workbooks)m_objExcel.Workbooks;
m_objBook=(Excel._Workbook)(m_objBooks.Add(m_objOpt));
//Adddatatocellsinthefirstworksheetinthenewworkbook.
m_objSheets=(Excel.Sheets)m_objBook.Worksheets;
m_objSheet=(Excel._Worksheet)(m_objSheets.get_Item
(1));
m_objRange=m_objSheet.get_Range("
m_objOpt);
m_objRange.Value="
LastName"
B1"
FirstName"
A2"
Doe"
B2"
John"
//ApplyboldtocellsA1:
B1.
"
m_objFont=m_objRange.Font;
m_objFont.Bold=true;
//SavetheWorkbookandquitExcel.
m_objBook.SaveAs(m_strSampleFolder+"
Book1.xls"
m_objOpt,m_objOpt,
m_objOpt,m_objOpt,m_objOpt,Excel.XlSaveAsAccessMode.xlNoChange,
m_objOpt,m_objOpt,m_objOpt,m_objOpt);
m_objBook.Close(false,m_objOpt,m_objOpt);
m_objExcel.Quit();
EXCEL表用c#来读
using
System.IO;
System.Web;
usingSystem.Web.SessionState;
usingNickLee.Common.ExcelLite;
namespaceexcel1
///<
summary>
///excel的摘要说明。
/summary>
publicclassexcel
publicexcel()
{
//
//TODO:
在此处添加构造函数逻辑
fileName=HttpContext.Current.Server.MapPath("
."
)+"
\\temp\\"
+g+"
.xls"
}
private
Guidg=Guid.NewGuid();
privatestringfileName;
ExcelFileec=newExcelFile();
///从model中复制模版到temp中
paramname="
modelName"
>
只需传入模版的名字即可(注意是字符串)<
/param>
publicvoidcopyModel(stringmodelName)
stringMName=HttpContext.
Current.Server.MapPath("
\\model\\"
+modelName;
File.Copy(MName,fileName);
///<
///设置EXCEL表中的字表个数,字表在这个表中统一命名为“续表”+数字序号
sheetnum"
设置字表的个数<
publicvoidsetSheets(intsheetnum)
ec.LoadXls(fileName);
ExcelWorksheetwsx=ec.Worksheets[0];
for(inty=0;
y<
sheetnum;
y++)
intnum=y+1;
ec.Worksheets.AddCopy("
续表"
+num,wsx);
///给EXCEL表的各个字段设置值
表的序号,注意表是以“0”开始的<
x"
对应于EXCEL的最左边的数字列<
y"
对应于EXCEL的最上面的字母列<
values"
需要写入的值<
publicvoidsetValues(intsheetnum,intx,inty,stringvalues)
ec.Worksheets[sheetnum].Cells[x,y].Value=values;
///保存函数,要是文件中有相同的文件就要删除了,
///然后重新写入相同文件名的新EXCEL表
publicvoidsaveFile()
if(File.Exists(fileName))
File.Delete(fileName);
ec.SaveXls(fileName);
else
///显示的EXCEL表格
publicvoidshowFile()
HttpContext.Current.Response.Charset=System.Text.Encoding.Default.WebName;
HttpContext.Current.Response.ContentType="
application/vnd.ms-excel"
HttpContext.Current.Response.ContentEncoding=System.Text.Encoding.UTF8;
HttpContext.Current.Response.WriteFile(fileName);
HttpContext.Current.Response.End();
小结一些C#