【自学笔记小白专用 从菜鸟到高手】C#_创建Excel文件实例操作

 

C#与excel操作项目之中时常涉及,其中为常用的内容是表格创建及与数据库的交互,于是查阅相关资料。

 

【第一,完全不懂啊】

 

1 Excel对象 
微软的Excel对象模型包括了128个不同的对象,从矩形,文本框等简单的对象到透视表,图表等复杂的对象.下面我们简单介绍一下其中最重要,也是用得最多的四个对象。
(1) Application对象。Application对象处于Excel对象层次结构的顶层,表示Excel自身的运行环境。

(2) Workbook对象。Workbook对象直接地处于Application对象的下层,表示一个Excel工作薄文件。
(3) Worksheet对象。Worksheet对象包含于Workbook对象,表示一个Excel工作表。
(4) Range对象。Range对象包含于Worksheet对象,表示Excel工作表中的一个或多个单元格。

 

2.1 Visual C#中调用Excel的COM组件

using Excel = Microsoft.Office.Interop.Excel;

.NET组件中定义了一个命名空间Excel,在此命名空间中封装了一个类Application,这个类和启动Excel表格有非常重要的关 系,在Visual C#中,只需要下列三行代码就可以完成打开Excel表格的工作,具体如下:

Excel.Application excel = new Excel.Application ();//引用Excel对象
excel.Application.Workbooks.Add ( true );//引用Excel工作簿
excel.Visible = true ;//使Excel可视

但此时的Excel表格是一个空的表格,没有任何内容,下面就来介绍如何往Excel表格中输入数据。

往Excel表格中输入数据
在命名空间"Excel"中,还定义了一个类"Cell",这个类所代表的就是Excel表格中的一个单元格。通过给"Cell"赋值,从而实现往Excel表格中输入相应的数据,下列代码功能是打开Excel表格,并且往表格输入一些数据。

Excel.Application excel = new Excel.Application () ;
excel.Application.Workbooks.Add ( true ) ;
excel.Cells[ 1 , 1 ] = "First Row First Column" ;
excel.Cells[ 1 , 2 ] = "First Row Second Column" ;
excel.Cells[ 2 , 1 ] = "Second Row First Column" ;
excel.Cells[ 2 , 2 ] = "Second Row Second Column" ;
excel.Visible = true ; 

3.4 实例

下面实例在C#中连接Oracle数据库(Name),从表(TableName)中读取数据,并写入Excel.

string cnString="Provider=msdaora.1;Data source=Name; ";
cnString=cnString+"user id=UserName;password=Password";
try
{
OleDbConnection cn=new OleDbConnection (cnString);
cn.Open ();
try
{
string s="select * from Name.TableName";
OleDbCommand cmd=new OleDbCommand (s,cn);
OleDbDataReader dr=cmd.ExecuteReader ();
Excel.Application xlApp = new Excel.Application();
if(xlApp==null){MessageBox.Show ("Can’t open Excel!");return;}
xlApp.Application .Workbooks .Add (true);
int row=2,fieldcount;
fieldcount=dr.FieldCount ;
for(int col=0;col

【第二,有点懂那么一丢丢】

本次主要介绍C#中对Excel文档进行新建、打开、保存、关闭的方法。

我们先创建一个Application对象,并将对象的Visible属性设置为True:

Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();
app.Visible = true;

 

一 新建文档


1.1 以默认方式进行新建
        调用app中Workbooks的Add()接口,可以实现按照默认方式新建一个Excel文档。Workbooks是文档Workbook文档类的集合,而Add()函数在参数为空的情况下可以按照默认参数新建一个Workbook对象并添加到Workbooks中。

app.Workbooks.Add();

1.2 按照自定义模板进行新建

        除了上述按照默认方式创建空文档之外,我们还可以给Add()函数传入word模板的方式创建一个新的文档,而这个文档其实就是我们提供的word模板的一个副本。

app.Workbooks.Add("D:\\Test.xlsx");

注意:这种方式只是在内存中创建了一个原模板的副本,对改副本所做的修改不会更新到原来的模板上。

二、打开文档

        利用app. Workbooks的Open()函数可以打开一个已经存在的文档,此时是在该文档上进行修改,因此任何的改动都会生效。该函数会返回一个Workbook对象,它就是我们操作的Excel文档对象,后续基本一些其他操作都与它有关。

Workbook book=app.Workbooks.Open("D:\\Test.xlsx ");

三、增加一个sheet

        调用Workbook的Add()的接口可以为文档增加一个,如图所示,默认情况下打开的Excel文件有3个Sheet,我们用Workbook的Add()的接口增加了一个Sheet

book.Worksheets.Add();

四、保存文档

        Workbook的Save()接口,可以将修改保存到已打开的文档。

book.Save();

五、退出Excel

app.Quit();

【第三:我会认识它】

c#创建、保存excel正常执行

 

using Excel = Microsoft.Office.Interop.Excel;
using System.Reflection;
  
public class MyConsole
{
  public static void Main()
  {
    Excel.Application app = new Excel.Application();
    try
    {
      //让后台执行设置为不可见
      app.Visible = false;
      //新增加一个工作簿
      Workbook wBook = app.Workbooks.Add(true);
      //如果要打开已有的工作簿,则使用下面的注释语句
      // Workbook wBook = app.Workbooks.Open(@"C:YourPathYourWorkbook.xls",
      //  missing, missing, missing, missing, missing, missing, missing,
      //  missing, missing, missing, missing, missing,missing, missing);
  
      //取得一个工作表
      //如果打开了已有的工作簿,也可以这样获取工作表Worksheet wSheet = wBook.ActiveSheet as Worksheet
      Worksheet wSheet = wBook.Worksheets[1] as Worksheet;
  
      wSheet.Cells[1, 1] = "this is a test";
      //设置禁止弹出保存和覆盖的询问提示框
      app.DisplayAlerts = false;
      app.AlertBeforeOverwriting = false;
      //保存工作簿
      wBook.Save();
      //保存excel文件
      app.Save("C:abc.xls");
    }
    catch
    {
    }
    finally
    {
      //确保Excel进程关闭
      app.Quit();
      app = null;
    }
  }
}

语句一 Workbook wBook = app.Workbooks.Add(true);Workbooks.Add的参数是个object类型,通常使用true或null,表明工作簿在默认文档下创建,或者使用枚举值 XlWBATemplate.xlWBATWorksheet,但如果传入一个excel完整文件名,按照自定义模板进行新建(这种自定义模板新建方式只是在内存中创建了一个原模板的副本,对改副本所做的修改不会更新到原来的模板上。)。

 

语句二 Worksheet wSheet = wBook.Worksheets[1] as Worksheet;wBook.Worksheets虽然反映的是工作表的集合,然而新创建的工作簿中只有一个工作表,且索引是1,如果换成0将无法找到指定的WorkSheet,如果是操作多个工作表的话,建议用new WorkSheetClass()实例化之后加入到wBook.Worksheets中去。如果是打开已存在的工作簿,这条语句也可能会报错,最好是调用wBook.ActiveSheet来获取或者再加些判断。
 

语句三 wBook.Save();app.Save("C:abc.xls")

生成的abc.xls除了本机上运行此代码的用户打开正常外,其他户打开后的错误信息如下:

  无法访问文件。请尝试下列方法之一:

  确认所指定的文件夹已存在。

  确认文件所在的文件夹不是只读的。

  确认给出的文件名不包含下列字符:<>?[]:Sheet1.xls或*。

  确认文件/路径名长度不超过218个字符。
因为此时创建的工作簿其实是在当前用户的“我的文档”目录下自动生成了一个Sheet1.xls副本,而abc.xls是指向这个副本的快捷方式,所以导致其他用户无权访问。我采取的解决办法是将这两句替换为:

wSheet.SaveAs("C:abc.xls",Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value);

  wBook.Save();

 

 

语句四 app.Quit();

凭借Quit()还没有释放掉对象,excel进程不一定会终止,于是,有人使用KillProcess()来处理,我个人认为这不是一个好主意,可能会破坏其它正在执行的excel进程。目前我使用app = null;权作安慰吧。退出前确保一定是执行过WorkBook或是Application的Save()方法的。

 

 

 

 

【第四:我会研究改造它】

 

C#创建保存Excel文件

private void btn_Create(object sender,EventAgrs e)
{
  string P_str_path=txt_Path.text;
  Microsoft.Office.Interop,Excel.Application excel=new Morosoft.Office.Interop.Excel.Application();
  Microsoft.Office.Interop,Excel.Workboook new Workboook=excel.Application.Workboooks add(true);
  object missing =System.Reflection.Missing.Value();
  new WorkBook.WorkSheets.add(missing,missing,missing,missing);
  if(P_str_path.EndsWith("\\"))
     new WorkBook.SaveCopyAs(P_str_path+Datetime.Now.ToString("yyyyMMddhhmmss")+."xls");
  else
     new WorkBook.SaveCopyAs(P_str_path+"\\"+Datetime.Now.ToString("yyyyMMddhhmmss")+."xls");
   MessageBox.Show("Excel文件创建成功","提示",MessangeButton.OK,MessageBoxIcon.Information);
   System.Diagnostics.Process[]execelProcess=System.Diagnostics.Process.GetProcessByName("EXCEL");
   foreach(System.Diagnostics.Process p in excelPricess)
     p.Kill();
  
}

将SQLServer 数据查询结果输出到Excel

private void btn_Excel(object sender,EventAgrs e)
{
   if(dgv_Info.Rows.Count==0)
      return;
   Microsoft.Office.Interop,Excel.Application excel=new Morosoft.Office.Interop.Excel.Application();
   excel.Application.Workbooks.Add(true);
   excel.Visible=true;
   for(int i = 0; i

从 Excel 中获取数去到指定文件

private void btn_Output(object sender,EventAgrs e)
{
   OleDbConnection olecon = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + txt_Path.Text + ";ExtendedProperties=Excel.8.0");
   olecon.open
   OleDbDataAdapter oledba = new  OleDbDataAdapter("select*from["+cbox_SheetName.Text+"$]",olecon);
   DataSet myds = new  DataSet();
   oleddba.Fill(myds);
   Stream Writer SWiter = new Stream Writer(cbox_SheetName.Text+".txt",false,Encoding.Deflaut);
   string P_str_Content="";
   for(int i =0; i

 

 

通过实例的演示向你具体介绍下

C#创建Excel文件的操作的具体过程是什么呢?那么这里向你介绍了具体的实现实例,是用什么方法可以实现呢

1.  private void Button2_Click(object sender, System.EventArgs e)  
2.  {  
3.   object missing = System.Reflection.Missing.Value;   
4.   //Excel.Application myExcel = new Excel.Application() ;   
5.   myExcel = new Excel.ApplicationClass();   
6.   
7.   Excel._Workbook xBk ;//工作薄   
8.   Excel._Worksheet xSt;//工作Sheet  
9.     
10. xBk = myExcel.Workbooks.Add(true);   
11. 
12. for (inti = 0; i < 5; i ++)  
13. {   
14.xSt = (Excel._Worksheet)xBk.ActiveSheet;   
15.xSt.Name ="chenms_" + i ;   
16.myExcel.Cells[2,2]="chenms";  
17.if(i < 4)  
18.{  
19. myExcel.Sheets.Add(missing,missing,1,Excel.XlSheetType.xlWorksheet);  
20.}  
21. }//C#创建Excel文件  
22. myExcel.Visible = true;  
23. xBk.SaveAs(@"d:cms.xls",missing,missing,   
24.missing,missing,missing,Excel.XlSaveAsAccessMode.xlShared,   
25.missing,missing,missing,missing,missing);   
26. // myExcel.Save(@"d:cms.xls");C#创建Excel文件  
27. myExcel.Quit();  
28. Response.ClearContent();  
29. Response.ClearHeaders();  
30. Response.AppendHeader("Content-Disposition","attachment;filename=d:cms.xls");  
31. Response.Buffer = true;  
32. Response.ContentType = "application/ms-excel";  
33. //将报表文件存入本地  
34. Response.WriteFile("d:cms.xls");  
35. Response.Flush();  
36. Response.Close();  
37. //C#创建Excel文件之从磁盘删除导出的文件  
38. System.IO.File.Delete("d:cms.xls");   
39. 
40.}  

 

 

C#中创建、打开、读取、写入、保存Excel的一般性代码

首先,在引用的COM中找到Microsoft.Office.Interop.Excel.dll,添加。

using System; 
using System.Reflection; // 引用这个才能使用Missing字段 
using Excel = Microsoft.Office.Interop.Excel;

namespace CExcel1 
{ 
class Class1 
{ 
[STAThread] 
static void Main(string[] args) 
{ 
//创建Application对象 
Excel.Application xApp=new Excel.Application();

xApp.Visible=true; 
//得到WorkBook对象, 可以用两种方式之一: 下面的是打开已有的文件 
Excel.Workbook xBook=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.Worksheet xSheet=(Excel.Worksheet)xBook.Sheets[1]; 
//Excel.Worksheet xSheet=(Excel.Worksheet)xApp.ActiveSheet; 

//读取数据,通过Range对象 
Excel.Range rng1=xSheet.get_Range("A1",Type.Missing); 
Console.WriteLine(rng1.Value2); 

//读取,通过Range对象,但使用不同的接口得到Range 
Excel.Range rng2=(Excel.Range)xSheet.Cells[3,1]; 
Console.WriteLine(rng2.Value2); 

//写入数据 
Excel.Range rng3=xSheet.get_Range("C6",Missing.Value); 
rng3.Value2="Hello"; 
rng3.Interior.ColorIndex=6; //设置Range的背景色 

//保存方式一:保存WorkBook 
xBook.SaveAs(@"D:\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(@"D:\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#中.net对Excel进行开发的知识点

采用Microsoft Office自带的COM组件来进行开发,因为感觉这个用起来比较简单。

首先当然是引用usingMicrosoft.Office.Interop.Excel;这个组件里面有四个关键的对象,由大到小分便是Application,Workbook,Worksheet和Range。对于Excel的操作基本上是引用这些对象的方法和属性,而且操作起来简单易懂,下面分别介绍一下每一个对象的一些功能和基本用法,涉及得可能不够全面。

 

Application对象代表 Excel 应用程序本身。主要的属性都是控制一些全局的属性,比如状态(cursor,EditDirectlyInCell),显示(DisplayAlerts,DisplayFullScreen)和Excel里面一些元素(Workbooks,Sheets)的控制等。其中最关键的就是和Workbooks属性的交互,使我们可以打开,新建工作簿并进行一步的操作。

参考 一般贴:https://blog.csdn.net/zou15093087438/article/details/79369798

参考 一般帖:https://blog.csdn.net/lp244392323/article/details/7075587

 

 

 

持续更新中

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(C#,C#Excel对象)