C#操作Excel(读/写)
http://www.cnblogs.com/litianfei/archive/2008/03/21/1116906.html 写的很详细
一、操作Excel 首先导出Excel
(1)示例:
/// <summary>
/// 操作Excel
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
Application excel = new Application();//引用Excel对象
excel.Application.Workbooks.Add(true);//引Excel工作薄
excel.Cells[, ] = "First Row First Column";
excel.Cells[, ] = "First Row Second Column";
excel.Cells[, ] = "Second Row First Column";
excel.Cells[, ] = "Second Row Second Column";
excel.Visible = true;//使Excel可视
}
(2)实例:
private void InputEx()
{
try
{
String Pid=Request.QueryString[“id”];
if (Pid != "")
{
string STime = " 1990-01-01 00:00:00";
string Etime = DateTime.Now.ToString();
if (!string.IsNullOrEmpty(begintime.Value))
{
STime = begintime.Value + " 00:00:00";
}
if (!string.IsNullOrEmpty(endtime.Value))
{
Etime = endtime.Value + " 23:59:59";
}
IList<Model.Renew> List = new BLL.Service().GetInputEx(Pid,STime,Etime);
#region 导出
if (List.Count > )
{
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
// 创建Excel应用程序对象的一个实例,相当于我们从开始菜单打开Excel应用程序
if (xlApp == null)
{
ClientScript.RegisterStartupScript(this.GetType(), "", "<script type=\"text/javascript\">alert('您未安装Office');</script>");
return;
}
System.Globalization.CultureInfo CurrentCI = System.Threading.Thread.CurrentThread.CurrentCulture;
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;
Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[];
Microsoft.Office.Interop.Excel.Range range;
string[] NameS = { "序号?", "姓名", "性别", "电话", "手机型号", "电脑型号", "汽车品牌", "购买时间" };
for (int i = ; i < NameS.Length; i++)
{
worksheet.Cells[, i + ] = NameS[i];
range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[, i + ];
range.Interior.ColorIndex = ;
range.HorizontalAlignment = XlHAlign.xlHAlignCenter;
range.Borders.LineStyle = XlLineStyle.xlContinuous;
range.Borders.LineStyle = XlLineStyle.xlContinuous;
range.ColumnWidth = 15.5;
range.Font.Bold = true;
}
for (int r = ; r < List.Count; r++)
{
worksheet.Cells[r + , ] = (r + );
worksheet.Cells[r + , ] = “张三”;
worksheet.Cells[r + , ] = “男”;
worksheet.Cells[r + , ] = “”;
worksheet.Cells[r + , ] =”三星”;
worksheet.Cells[r + , ] =“攒的”; worksheet.Cells[r + , ] =“大挂”;
worksheet.Cells[r + , ] = “--”;
Range rng01 = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[r + , ];
Range rng02 = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[r + , ];
rng01.ColumnWidth = ; //第八列变宽
rng02.HorizontalAlignment = XlHAlign.xlHAlignLeft; //第二列居左
}
xlApp.Visible = true;
}
else
{
ClientScript.RegisterStartupScript(this.GetType(), "", "<script type=\"text/javascript\">alert('根据条件未查询到数据');</script>");
return;
}
#endregion }
else
{
ClientScript.RegisterStartupScript(this.GetType(), "", "<script type=\"text/javascript\">alert(请选择查询条件?');</script>");
return;
}
}
catch (Exception ex)
{
Common.Log.Error("导出信息页面错误信息:" + ex.Message);
}
}
(3)主要参数(引用上面链接内容):
Excel的处理:如果在你已知Excel格式的情况下,可以控制Excel,如下:
1、 显示当前窗口:ExcelApp.Visible := True;
2、 更改 Excel 标题栏:ExcelApp.Caption := '标题内容';
3、 添加新工作簿:ExcelApp.WorkBooks.Add;
4、 设置第2个工作表为活动工作表:ExcelApp.WorkSheets[2].Activate;
5、 给单元格赋值:ExcelApp.Cells[1,1].Value := '第一行第一列';
6、 设置指定列的宽度(单位:字符个数),以第一列为例:
ExcelApp.ActiveSheet.Columns[1].ColumnsWidth
:= 5;
7、 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:ExcelApp.ActiveSheet.Rows[2].RowHeight
:= 1/0.035; // 1厘米
8、文字水平居中:Excelid.worksheets[1].Rows[1].HorizontalAlignment :=
$FFFFEFF4; 文字垂直居中:Excelid.worksheets[1].Rows[1].VerticalAlignment := $FFFFEFF4;
9、 插入一行或一列:a. ExcelApp.ActiveSheet.Rows[2].Insert;b.
ExcelApp.ActiveSheet.Columns[1].Insert;
10、 删除一行或一列:a. ExcelApp.ActiveSheet.Rows[2].Delete;b.
ExcelApp.ActiveSheet.Columns[1].Delete;
11、合并单元格:ExcelApp.worksheets[1].range[A1:F8'].Merge(abc);注:要声明变量abc: Variant;
12、竖行显示文字:ExcelApp.worksheets[1].Cells.Item[1,1].Orientation:=
xlVertical;
13、单元格加边线:ExcelApp.worksheets[1].Range[A1:F8].Borders.LineStyle := 1;
14、在第8行之前插入分页符:ExcelApp.WorkSheets[1].Rows[8].PageBreak := 1;
15、在第4列之前删除分页符:ExcelApp.ActiveSheet.Columns[4].PageBreak := 0;
16、指定边框线宽度:ExcelApp.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3;
1-左 2-右 3-顶 4-底 5-斜( \ ) 6-斜( / )
17、拷贝操作:a.拷贝整个工作表:ExcelApplication1.ActiveSheet.Used.Range.Copy;
b.拷贝指定区域:ExcelApplication1.ActiveSheet.Range[ 'A1:E2' ].Copy;从A1位置开始粘贴:ExcelApplication1.ActiveSheet.Range.[ 'A1'
].PasteSpecial;
d.从文件尾部开始粘贴:ExcelApplication1.ActiveSheet.Range.PasteSpecial;
18、清除第一行第四列单元格公式:ExcelApp.ActiveSheet.Cells[1,4].ClearContents;
19、工作表保存:if not ExcelApp.ActiveWorkBook.Saved then ExcelApp.ActiveSheet.PrintPreview;
20、工作表另存为:ExcelApp.SaveAs( 'C:\Excel\Demo1.xls' );
21、放弃存盘:ExcelApp.ActiveWorkBook.Saved := True;
22、关闭工作簿:ExcelApp.WorkBooks.Close;
23、退出 Excel:ExcelApp.Quit;
下面是有关打印页面控制的语句:
24、设置第一行字体属性:ExcelApp.ActiveSheet.Rows[1].Font.Name := '隶书';
ExcelApp.ActiveSheet.Rows[1].Font.Color
:= clBlue;
ExcelApp.ActiveSheet.Rows[1].Font.Bold
:= True;
ExcelApp.ActiveSheet.Rows[1].Font.UnderLine
:= True;
ExcelApp.ActiveSheet.Rows[1].Font.size:=10;
25、进行页面设置:a.页眉:ExcelApp.ActiveSheet.PageSetup.CenterHeader := '报表演示';
b.页脚:ExcelApp.ActiveSheet.PageSetup.CenterFooter := '共&N页 第&P页';
c.页眉到顶端边距2cm:ExcelApp.ActiveSheet.PageSetup.HeaderMargin :=
2/0.035;
d.页脚到底端边距3cm:ExcelApp.ActiveSheet.PageSetup.HeaderMargin :=
3/0.035;
e.顶边距2cm:ExcelApp.ActiveSheet.PageSetup.TopMargin :=
2/0.035;
f.底边距2cm:ExcelApp.ActiveSheet.PageSetup.BottomMargin :=
2/0.035;
g.左边距2cm:ExcelApp.ActiveSheet.PageSetup.LeftMargin :=
2/0.035;
h.右边距2cm:ExcelApp.ActiveSheet.PageSetup.RightMargin :=
2/0.035;
i.页面水平居中:ExcelApp.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;
j.页面垂直居中:ExcelApp.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
k.打印单元格网线:ExcelApp.ActiveSheet.PageSetup.PrintGridLines := True;
26、打印预览工作表:ExcelApp.ActiveSheet.PrintPreview;
27、打印输出工作表:ExcelApp.ActiveSheet.PrintOut;
对Excel的其他控制:
28、excel的多单元格合计功能:ExcelApp..Cells[ARow, ACol].Formula
:= '=
SUM($+IntToStr(BeginRow) +:$ + IntToStr(EndRow) +');
注:声明变量ARow, ACol: Integer;
29、打开已经存在的Excel文件: ExcelApplication1.Workbooks.Open (c:\a.xls
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,0);
二、 读取Excel
List<Model.it> List = new List<Model.it>(); /// <summary>
/// 导入按钮时间,将Excel数据导入列表里
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void GetExcel_Click(object sender, EventArgs e)
{
string fullpath = string.Empty;
SaveFile(ref fullpath);
if (string.IsNullOrEmpty(fullpath))
{
MessageBox("文件格式错误", "", Page.ClientScript);
return;
}
List.Clear();
ExcelToList(fullpath);
} /// <summary>
/// 保存按钮事件,将excel数据保存到数据库
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void Save_Click(object sender, EventArgs e)
{
int id = Request.QueryString[“id”];
string log = string.Empty;
int errorcount = ;
DateTime dt = DateTime.Now;
string tag = dt.Year.ToString() + dt.Month.ToString() + dt.Day.ToString() + dt.Hour.ToString() + dt.Minute.ToString() + dt.Millisecond.ToString();
int count = List.Count;
for (int i = ; i < count; i++)
{
string error = string.Empty;
var model = List[i];
try
{
if (Cis.IsHasid(model))// 已存在,不可插入
{
error += "第" + (i + ) + "行报错:该id:" + model.id + "已存在";
}
}
catch (Exception ex)
{
error += "第" + (i + ) + "行报错: id=" + model.id + "错误原因:" + ex.Message;
}
if (!string.IsNullOrEmpty(error))
{
log += error;
errorcount++;
FileIO.WriteFile(Server.MapPath("~/Log/UploadExcelPath") + "/logs " + "_" + tag + ".txt", error);
}
}
List.Clear();
btn_Save.Visible = true;
if (!string.IsNullOrEmpty(log))
{
ScriptManager.RegisterStartupScript(this, this.GetType(), Guid.NewGuid().ToString(), "alert(‘计划导入" + count + "行记录,其中" + errorcount + "行错," + (count - errorcount) + "行成功,<a target=\"_blank\" href=\"" + "/Log/UploadExcelPath" + "/logs" + "_" + tag + ".txt" + "\">查看错误地址</a>');");
}
else
MessageBox("全部导入成功", "", Page.ClientScript);
} /// <summary>
///上传提交的文件
/// </summary>
public void SaveFile(ref string fullpath)
{
string fileName = this.fileUpExcel.FileName;
string path = Server.MapPath("~/Log/UploadExcelPath");
string fileType = fileUpExcel.PostedFile.ContentType;
if ((fileType == "application/vnd.ms-excel" ||
fileType == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") ||
(fileType == "application/octet-stream" &&
(Path.GetExtension(fileName) == ".xls" || Path.GetExtension(fileName) == ".xlsx")))
{
DateTime dt = DateTime.Now;
string tag = dt.Year.ToString() + dt.Month.ToString() + dt.Day.ToString() + dt.Hour.ToString() + dt.Minute.ToString() + dt.Millisecond.ToString();
string name = "nit_" + tag + "_" + fileName;
//判断是否有该目录?
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(path);
if (!dir.Exists)
{
dir.Create();
}
fullpath = path + "//" + name;
//如果存在,删除文件
if (File.Exists(fullpath))
{
File.Delete(fullpath);
}
this.fileUpExcel.SaveAs(fullpath);//上传
}
} /// <summary>
/// 导出Excel到List并展现出来
/// </summary>
/// <param name="fullpath"></param>
/// 引用using System.Data.OleDb;
public void ExcelToList(string fullpath)
{
DataTable dtExcel = null;
// using (OleDbConnection oleCon = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=\"Excel 8.0;HDR=NO;IMEX=1;\"; Data Source=" + fullpath + ";"))//32位?
using (OleDbConnection oleCon = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=\"Excel 12.0;HDR=NO;IMEX=1;\"; Data Source=" + fullpath + ";"))//64位?
{
oleCon.Open();
DataTable dtNames = oleCon.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);//获取excel表名
oleCon.Close();
var rows = dtNames.Rows;
if (rows.Count > )
{
var sheetname = rows[][].ToString();
OleDbDataAdapter oldAdapter = new OleDbDataAdapter("select * from [" + sheetname + "]", oleCon);//获取表数据
DataSet ds = new DataSet();
oldAdapter.Fill(ds, "table");
oleCon.Close();
dtExcel = ds.Tables["table"];
var count = dtExcel.Rows.Count;
if (count > )
{
for (int i = ; i < count; i++)
{
var now = DateTime.Now;
List.Add(new Model. it { id = dtExcel.Rows[i][].ToString(), Tid = dtExcel.Rows[i][].ToString(), State = , Ontime = now, Status = , Update_time = now });
}
clist.DataSource = List;
clist.DataBind();
btn_Save.Visible = true;
}
else
{
MessageBox("Excel表格无数据,请重新导入", "", Page.ClientScript);
return;
}
}
else
{
MessageBox("Excel表格无数据,请重新导入", "", Page.ClientScript);
return;
}
}
if (dtExcel == null)
{
//读取错误
MessageBox("Excel读取错误,请重新导入", "", Page.ClientScript);
return;
}
}
C#操作Excel(读/写)的更多相关文章
- 20 常用模块 hashlib hmac:加密 xml xlrd xlwt:excel读|写 configparser subprocess
hashlib模块:加密 加密: 1.有解密的加密方式 2.无解密的加密方式:碰撞检查 hashlib -- 1)不同数据加密后的结果一定不一致 -- 2)相同数据的加密结果一定是一致的 import ...
- Java操作Excel(读、写、搜索关键字、插入图片)
import java.io.File; import java.io.IOException; import jxl.Cell; import jxl.Sheet; import jxl.Workb ...
- java用POI操作excel——随便写一下,最基础的东西
前两天部门实施在做一个东西,需要把客户放在Excel中的数据导入到Oracle数据库中,我就想着直接写一个模板,必要的时候改一下实体类应该可以解放实施同事的双手,不过在实际写的过程中,还是碰到很多问题 ...
- python操作Excel读--使用xlrd
一.安装xlrd模块 到python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了python 环境. 二.使用介绍 1.导入模块 import x ...
- python3 对excel读、写、修改的操作
一.对excel的写操作实例: 将一个列表的数据写入excel, 第一行是标题,下面行数具体的数据 import xlwt #只能写不能读 stus = [['姓名', '年龄', '性别', '分数 ...
- Pandas 基础(4) - 读/写 Excel 和 CSV 文件
这一节将分别介绍读/写 Excel 和 CSV 文件的各种方式: - 读入 CSV 文件 首先是准备一个 csv 文件, 这里我用的是 stock_data.csv, 文件我已上传, 大家可以直接下载 ...
- C# 读带复选框的excel,写excel并设置字体、边框、背景色
这是一篇excel读写功能大汇总,通过C#调用Microsoft.Office.Interop.Excel.dll才能完成任何复杂格式excel的读写操作. 本文需要读取的excel格式如下: 可见表 ...
- day9 python学习 文件的操作 读 写 seek
文件的操作 1 文件的打开操作: 文件句柄 = open('文件路径', '模式') f=open('wangyakun','a+',encoding='utf-8') #文件名, 如果是绝对路径 ...
- Excel操作类库最常用到的4种开源项目与MS Excel类库写操作对比分析性能
4种开源Excel读写类库与MS Excel类库写操作对比 软件开发过程中,经常需要将数据保存为.xls或.xlsx文件.之前发现微软提供的Microsoft.Office.Interop.Excel ...
随机推荐
- Java GUI图形界面开发工具
Applet 应用程序 一种可以在 Web 浏览器中执行的小程序,扩展了浏览器中的网页功能. 缺: 1.需要下载 Applet 及其相关文件 2.Applet 的功能是受限制的 优: 3.无需 ...
- HDU 3307 Description has only two Sentences
数学实在是差到不行了…… #include <cstdio> #include <cstring> #include <algorithm> #include &l ...
- C++模板:文件操作
freopen("demo.in","r",stdin); freopen("demo.out","w",stdout) ...
- Drying(贪心)
Drying Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 11512 Accepted: 2977 Descripti ...
- PHP自学之路-----javascript基础入门
Javascript概述: Javascript是基于对象和事件的脚本语言.特点; 1.安全性(不允许直接访问本地硬盘),它可以做的就是信息的动态交互. 2.跨平台性. JavaScript与HTML ...
- NS2 nam中节点及数据流颜色设置
NS2 节点颜色设置在http://hi.baidu.com/jrwen0/item/d105c642f4c3ce36fb89601b说明的比較具体,大家能够參见. 我这里想说的是数据流颜色的设置,相 ...
- GridView事件分析
GridView事件分析 (转) P1默认数据绑定过程 编号 事件名称 作用 E1 DataBinding 数据绑定之前触发,在这个事件之前(第一次生成GridView),GridView不存在行数据 ...
- asp.NET配置
添加用户 1.选择创建用户 2 可以使用网站管理工具来管理应用程序的所有安全设置.可以设置用户和密码(身份验证),可以创建角色(用户组),还可以创建权限(用于控制对应用程序各个部分的访问的规则). ...
- js中的setTimeout和setInterval
在html页面中要使用自动刷新功能时,可以是使用js中setTimeout和setInterval: 一.使用方法 setTimeout的使用setTimeout('要调用的Js方法', 调用的延迟时 ...
- html 5 新增标签及简介
作为下一代Web技术的代表,HTML5概念在近些年尤其火热.据了解,HTML5受到垂青最直接的原因就是其跨平台性,除此之外,它不仅仅可以用于表示Web内容,还可能将Web带入一个广阔的生态平台. 下面 ...