C#对Excel的操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#对Excel的操作相关的知识,希望对你有一定的参考价值。

怎样得到打开指定路径下的Excel对象

一、新建EXCEL表

COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);

app.CreateDispatch("EXCEL.Application");

app.SetVisible(false); //设置表可见性

app.SetDisplayFullScreen(false); //设置不全屏显示

app.SetDisplayAlerts(false); //屏蔽警告

二、打开EXCEL表

char path[MAX_PATH];

GetCurrentDirectory(MAX_PATH,path); //获取当前目录

CString strPath = path;

strPath += "\\计算结果";

books.AttachDispatch(app.GetWorkbooks(),true);

book.AttachDispatch(books.Add(_variant_t(strPath)));

三、获取工作表

sheets = book.GetWorksheets();

sheet = sheets.GetItem(COleVariant((short)1));

四、新建工作表

sheets = book.GetWorksheets();

sheets.Add(vtMissing,vtMissing,_variant_t((long)5[u1] ),vtMissing);

五、选择工作表某个区域

1、range = sheet.GetRange(COleVariant("A1"),COleVariant("A1"));

2、range.AttachDispatch(sheet.GetRange(_variant_t("K39"),_variant_t("K39")),TRUE);

六、合并单元格

range = sheet.GetRange(COleVariant("A1"),COleVariant("A1")); //先选择区域

range.Merge(_variant_t((long)0)); //再合并

七、设置单元格内容

1、单个单元格赋值

range = sheet.GetRange(COleVariant("A1"),COleVariant("A1")); //先选择区域

range.SetValue2(COleVariant("××")); //再赋值

2、批量赋值

CString sCell; //定义字符串变量

for(int i=0; i<360; i++)



sCell.Format("A%d",i+2); //选择单元格

range = sheet.GetRange(COleVariant(sCell[u2] ),COleVariant(sCell[u3] ));

range.SetValue2(COleVariant((short)(1.5*i))); //再赋值



八、设定单元格字体,对齐方式,颜色,粗体,斜体,背景色,列宽,行高

Font ft; //定义字体变量

Interior it; //定义背景色变量

range = sheet.GetRange(COleVariant("A1"),COleVariant("A1")); //先选择区域

range.SetHorizontalAlignment(_variant_t((long)-4131)); //水平居中对齐

range.SetVerticalAlignment(_variant_t((long)-4108)); //竖直居中对齐

range.SetColumnWidth(COleVariant("20")); //列宽

range.SetRowHeight(COleVariant("25")); //行高

ft.AttachDispatch(range.GetFont()); //匹配

ft.SetBold(_variant_t((long)0)); //设置粗体,0-不加粗;1-加粗

ft.SetItalic(_variant_t((long)0)); //设置斜体,0-不斜;1-斜

ft.SetSize(_variant_t((long)11)); //字大小

ft.SetColorIndex(_variant_t((long)5)); //字颜色

it.AttachDispatch(range.GetInterior());

it.SetColorIndex(_variant_t((long)8)); //背景色

说明:

对齐方式:(水平)居中:-4108 靠左:-4131 靠右:-4152

(竖直)居中:-4108 靠上:-4160 靠下:-4107

线颜色值:1-黑;2-白;3-红;5蓝;6黄;7-粉红;8-浅蓝;9-灰;10-绿;

九、获取单元格数据

COleVariant rValue,gValue; //定义COleVariant变量

CString quzhi; //定义字符串变量

range = sheet.GetRange(COleVariant("A1"),COleVariant("A1"));

rValue=COleVariant(range.GetValue(gValue)); //取得单元格数据

rValue.ChangeType(VT_BSTR); //数据转换格式

quzhi=rValue.bstrVal; //将单元格数据赋在字符串变量中

十、绘单元格边框

Range rg ; //定义变量

1、绘横线

CString strCell1strCell2,strCell3;

for (i=5;i<21;i++)



strCell1.Format("I%d",i*2);

strCell2.Format("K%d",i*2);

rg.AttachDispatch(sheet.GetRange(COleVariant(strCell1),

COleVariant(strCell2)),true);

rg.BorderAround(_variant_t((long)1),_variant_t((long)2),

_variant_t((long)1),vtMissing);

//线型 // 线宽 //颜色



2、绘竖线

for(i=0;i<20;i++)



strCell1.Format("%c12",(char)('I'+i));

strCell2.Format("%c40",(char)('I'+i));

rg.AttachDispatch(sheet.GetRange(COleVariant(strCell1)

,COleVariant(strCell2)),true);

rg.BorderAround(_variant_t((long)1),_variant_t((long)2),

_variant_t((long)3),vtMissing);



3、绘外框

strCell3=(CString)CHAR(i+74)+"40";

rg.AttachDispatch(sheet.GetRange(COleVariant("I10"),

COleVariant(strCell3)),TRUE);

rg.BorderAround(_variant_t((long)1),_variant_t((long)3),

_variant_t((long)5),vtMissing);

十一、保存结果

book.SaveAs(COleVariant(strPath),covOptional,

covOptional,covOptional,

covOptional,covOptional, (long)0,covOptional,covOptional,covOptional,

covOptional,covOptional);

十二、关闭表及释放变量

app.Quit();

sheet.ReleaseDispatch();

sheets.ReleaseDispatch();

book.ReleaseDispatch();

books.ReleaseDispatch();

app.ReleaseDispatch();
参考技术A public static System.Data.DataTable getExcelData(string Path, out string errmsg) errmsg = string.Empty; DataTable dt = null; OleDbConnection conn = null; try string strConn = string.Empty; if (System.IO.Path.GetExtension(Path).Equals(".xlsx")) strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;';data source=" + Path; else if (System.IO.Path.GetExtension(Path).Equals(".xls")) strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + ";" + "Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;';"; conn = new OleDbConnection(strConn); conn.Open(); //返回Excel的架构,包括各个sheet表的名称,类型,创建时间和修改时间等 System.Data.DataTable dtSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] null, null, null, "Table" ); //包含excel中表名的字符串数组 string[] strTableNames = new string[dtSheetName.Rows.Count]; for (int k = 0; k < dtSheetName.Rows.Count; k++) strTableNames[k] = dtSheetName.Rows[k]["TABLE_NAME"].ToString(); OleDbDataAdapter myCommand = null; dt = new System.Data.DataTable(); //从指定的表明查询数据,可先把所有表明列出来供用户选择 string strExcel = "select * from [" + strTableNames[0] + "]"; myCommand = new OleDbDataAdapter(strExcel, strConn); dt = new System.Data.DataTable(); myCommand.Fill(dt); conn.Close(); conn.Dispose(); catch (InvalidOperationException ex) if (ex.Message.IndexOf("Microsoft.ACE.OLEDB.12.0") > -1) errmsg = "请安装excel2007"; else errmsg = "导入失败请与管理员联系"; catch (Exception ex) errmsg = "导入失败请与管理员联系"; finally conn.Close(); conn.Dispose(); return dt; 给你之前的代码本回答被提问者采纳

C#操作Excel的技巧与方法 设置单元格等

C#操作Excel可以分为客户端和插件版本,区别就是是否需要Excel环境,功能实现一样

一、通用操作与处理(有点乱有时间再整理)

1:工程对excel类库的导入,如:

c:\program files\Microsoft office\offiece11\excel.exe

2:命名控件的引入:

using Microsoft.office.Interop.Excel;

3:如果是对一个已经存在的excel文件进行操作则:

Application app=new Application();

Workbook wbook=app.Workbooks.Open("c:\\temp.xls",Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing);

//C#6.0后面的参数可以省略

Worksheet worksheet=(Worksheet)wbook.Worksheets[1];

4:新建一个excel文件:

Application app=new Application();

Workbook wbook=app.Workbooks.Add(Type.missing);

Worksheet worksheet=(Worksheet)wbook.Worksheets[1];

 

5:设置某个单元格里的内容:

worksheet.Cells[1,2]="列内容";

6读取某个单元格里的内容

string temp=((Range)worksheet.Cells[1,2]).Text;

7设置某个单元格里的格式

 Microsoft.Office.Interop.Excel.Range rtemp=worksheet.get_Range("A1","A1");

rtemp.Font.Name="宋体";

rtemp.Font.FontStyle="加粗";

rtemp.Font.Size=5;

//设置颜色
 rtemp.Interior.Color = ColorTranslator.ToOle(Color.DodgerBlue);

8 保存新建的内容:

worksheet.SaveAs("c:\\temp.xls",Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing, Type.Missing);

二、其他备注

一、    给表格数据赋特殊值:

Cells[18, 8] = "=SUM(D5:D17)";

二、进行一些表格合并操作:

下次进行补充哈

三、获取有范围的行和列

int k1=worksheet.UsedRange.Rows.Count;

获取列只需要将Rows修改为Columns

四、  判断有没有公式:

sheet.Cells[i, j].HasFormula

五、  遍历Excel:(最好加=号,下面会遗漏边界)

Workbook book = app.Workbooks.Open(file.FullName);
 foreach (Worksheet sheet in book.Worksheets)
     {
       for (int i = 1; i < sheet.UsedRange.Rows.Count; i++)
          {
          for (int j = 1; j < sheet.UsedRange.Columns.Count; j++)

      //此处进行函数操作

    }

  }

本人承接一些程序开发项目(能力范围内,例如Office开发和C#网络爬虫,数据库读写等)欢迎联系洽谈,QQ207708848,请注明来意。

更多内容还可以参考官方API

 

 

以上是关于C#对Excel的操作的主要内容,如果未能解决你的问题,请参考以下文章

C#操作Excel的技巧与方法 设置单元格等

C#能不能像操作SQL数据库那样使用sql语句对excel进行读取更新等操作?

在VS里面用C#实现对Excel表的操作

C#通过NPOI操作Excel

C# 将excel导入到DataGridView上 (可以对数据进行操作)

使用 CSC 编译 C# 代码 - excel 互操作