Excel数据导入导出
1、将sql数据库表中的数据导入到Excel表格里:
方法一、使用StreamWrite对象,这里要注意的是
用“\t”换列,StreamWrite对象的WriteLine方法 一行一行写入。
public static void ImportExcel()
{
DataAccess services = new DataAccess();
string sql = @"SELECT [Id]
,[Name]
,[Age]
,[Sex]
FROM [StudentManager].[dbo].[Student]";
DataTable dt = services.ExeDataTable(sql, CommandType.Text);
if (dt != null && dt.Rows.Count > 0)
{
using (StreamWriter sw = new StreamWriter(@"D:\123\test.xls", false, Encoding.UTF8))
{
string head = String.Empty;
foreach (var c in dt.Columns)
{
head += c.ToString() + "\t";
}
sw.WriteLine(head);
foreach (DataRow row in dt.Rows)
{
sw.WriteLine(row["Id"] + "\t" + row["Name"] + "\t" + row["Age"] + "\t" + row["Sex"]);
}
}
}
}
方法二、使用第三方类库:
需要引入:AppLibrary.dll和Interop.Excel.dll(Com组件)两个dll
C#读取Excel 几种方法的体会
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Collections.Generic;
using AppLibrary.WriteExcel;
using Excel; /// <summary>
///ExcelHelp 的摘要说明
/// </summary>
public class ExcelHelp
{
public ExcelHelp()
{
//
//TODO: 在此处添加构造函数逻辑
//
} /**/
/// <summary>
/// ASP.NET,分Sheet导出Excel文件
/// </summary>
/// <param name="dv">用于导出的DataView</param>
/// <param name="tmpExpDir">导出的文件夹,例如~/ExcelDownload/</param>
/// <param name="refFileName">文件名,例如test.xls</param>
/// <param name="sheetName">Sheet的名称,如果导出多个Sheet,会自动在名称后面加1、2、3</param>
/// <param name="sheetSize">每个Sheet包含的数据行数,此数值不包括标题行。所以,对于65536行数据,请将此值设置为65535</param>
/// <param name="setBorderLine">导出完成后,是否给数据加上边框线</param>
public static void WebExportToExcel(DataView dv, string tmpExpDir, string refFileName, string sheetName, int sheetSize, bool setBorderLine)
{
//设置多少行为一个Sheet
int RowsToDivideSheet = sheetSize;
//计算Sheet数
int sheetCount = (dv.Table.Rows.Count - ) / RowsToDivideSheet + ; GC.Collect();
Application excel;
_Workbook xBk;
_Worksheet xSt = null;
excel = new Application();
xBk = excel.Workbooks.Add(true); //申明循环中要使用的变量
int dvRowStart;
int dvRowEnd;
int rowIndex = ;
int colIndex = ; //对全部Sheet进行操作
for (int sheetIndex = ; sheetIndex < sheetCount; sheetIndex++)
{
//初始化Sheet中的变量
rowIndex = ;
colIndex = ;
//计算起始行
dvRowStart = sheetIndex * RowsToDivideSheet;
dvRowEnd = dvRowStart + RowsToDivideSheet - ;
if (dvRowEnd > dv.Table.Rows.Count - )
{
dvRowEnd = dv.Table.Rows.Count - ;
} //创建一个Sheet
if (null == xSt)
{
xSt = (_Worksheet)xBk.Worksheets.Add(Type.Missing, Type.Missing, , Type.Missing);
}
else
{
xSt = (_Worksheet)xBk.Worksheets.Add(Type.Missing, xSt, , Type.Missing);
} //设置SheetName
xSt.Name = sheetName;
if (sheetCount > )
{
xSt.Name += ((int)(sheetIndex + )).ToString();
} //取得标题
foreach (DataColumn col in dv.Table.Columns)
{
//设置标题格式
xSt.get_Range(excel.Cells[rowIndex, colIndex], excel.Cells[rowIndex, colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter; //设置标题居中对齐
xSt.get_Range(excel.Cells[rowIndex, colIndex], excel.Cells[rowIndex, colIndex]).Font.Bold = true;
//填值,并进行下一列
excel.Cells[rowIndex, colIndex++] = col.ColumnName;
} //取得表格中数量
int drvIndex;
for (drvIndex = dvRowStart; drvIndex <= dvRowEnd; drvIndex++)
{
DataRowView row = dv[drvIndex];
//新起一行,当前单元格移至行首
rowIndex++;
colIndex = ;
foreach (DataColumn col in dv.Table.Columns)
{ if (col.DataType == System.Type.GetType("System.DateTime"))
{
//excel.Cells[rowIndex, colIndex] = (Convert.ToDateTime(row[col.ColumnName].ToString())).ToString("yyyy-MM-dd");
excel.Cells[rowIndex, colIndex] = row[col.ColumnName].ToString();
}
else if (col.DataType == System.Type.GetType("System.String"))
{
excel.Cells[rowIndex, colIndex] = "'" + row[col.ColumnName].ToString();
}
else
{
excel.Cells[rowIndex, colIndex] = row[col.ColumnName].ToString();
}
colIndex++; }
}
//使用最佳宽度
Range allDataWithTitleRange = xSt.get_Range(excel.Cells[, ], excel.Cells[rowIndex, colIndex - ]);
allDataWithTitleRange.Select();
allDataWithTitleRange.Columns.AutoFit();
//xSt.get_Range(excel.Cells[1, 1], excel.Cells[rowIndex, colIndex-1]).Columns.AutoFit();
if (setBorderLine)
{
allDataWithTitleRange.Borders.LineStyle = ;
}
} //G:\LANSUN\Web\AdminUser\SysManager\100
//excel.Visible = true;
string absFileName = HttpContext.Current.Server.MapPath(System.IO.Path.Combine(tmpExpDir, refFileName));
xBk.SaveCopyAs(absFileName); xBk.Close(false, null, null); excel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(xBk);
System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
System.Runtime.InteropServices.Marshal.ReleaseComObject(xSt); xBk = null;
excel = null;
xSt = null;
GC.Collect();
} /// <summary>
/// 导出Excel
/// </summary>
/// <param name="dv"></param>
/// <param name="SheetRows"></param>
/// <param name="Columns"></param>
/// <param name="ColumnName"></param>
/// <param name="ExportNo"></param>
public static void ToExcel(DataView dv, int SheetRows, string ExportNo, HttpResponse response)
{
//GC.Collect();
AppLibrary.WriteExcel.XlsDocument doc = new AppLibrary.WriteExcel.XlsDocument(); doc.FileName = ExportNo + ".xls";
string SheetName = string.Empty;
//记录条数
int mCount = dv.Count; //每个SHEET的数量
int inv = SheetRows;
//计算当前多少个SHEET
int k = Convert.ToInt32(Math.Round(Convert.ToDouble(mCount / inv))) + ; for (int i = ; i < k; i++)
{
SheetName = "数据表" + i.ToString();
AppLibrary.WriteExcel.Worksheet sheet = doc.Workbook.Worksheets.Add(SheetName);
AppLibrary.WriteExcel.Cells cells = sheet.Cells; //创建列样式创建列时引用
XF cellXF = doc.NewXF();
cellXF.VerticalAlignment = VerticalAlignments.Centered;
cellXF.HorizontalAlignment = HorizontalAlignments.Centered;
cellXF.Font.FontFamily = FontFamilies.Roman;//设置字体 默认为宋体
for (int ColIndex = ; ColIndex < dv.Table.Columns.Count; ColIndex++)
{
//第一行表头
cells.Add(, ColIndex + , dv.Table.Columns[ColIndex].Caption, cellXF);
}
//for (int ColIndex = 0; ColIndex < Columns.Count; ColIndex++)
//{
// //第一行表头
// cells.Add(1, ColIndex + 1, Columns[ColIndex].ToString(), cellXF);
//}
int f = ;
for (int m = i * inv; m < mCount && m < (i + ) * inv; m++)
{
f++;
//循环主体内容
//for (int CellIndex = 0; CellIndex < ColumnName.Count; CellIndex++)
//{
// cells.Add(f, CellIndex + 1, dv.Table.Rows[m][ColumnName[CellIndex].ToString()].ToString(), cellXF);
//}
for (int CellIndex = ; CellIndex < dv.Table.Columns.Count; CellIndex++)
{
cells.Add(f, CellIndex + , dv.Table.Rows[m][dv.Table.Columns[CellIndex].ColumnName] is DBNull ? "" : dv.Table.Rows[m][dv.Table.Columns[CellIndex].ColumnName], cellXF);
}
}
}
//添加合计
//AppLibrary.WriteExcel.Worksheet sheetq = doc.Workbook.Worksheets.Add("合计");
//AppLibrary.WriteExcel.Cells cellsq = sheetq.Cells;
//cellsq.Add(1, 1, "合计数据条数");
//cellsq.Add(1, 2, mCount);
//
doc.Send();
response.Flush();
response.End();
} public static void ToSeveralExcel(DataSet ds, string ExportNo, HttpResponse response, string[] sheetNames, int eachSheetCount)
{
//GC.Collect();
AppLibrary.WriteExcel.XlsDocument doc = new AppLibrary.WriteExcel.XlsDocument(); doc.FileName = ExportNo + ".xls";
string SheetName = string.Empty;
//记录条数
int mCount = ds.Tables[].Rows.Count; for (int i = ; i < sheetNames.Length; i++)
{
SheetName = sheetNames[i];
AppLibrary.WriteExcel.Worksheet sheet = doc.Workbook.Worksheets.Add(SheetName);
AppLibrary.WriteExcel.Cells cells = sheet.Cells; //创建列样式创建列时引用
XF cellXF = doc.NewXF();
cellXF.VerticalAlignment = VerticalAlignments.Centered;
cellXF.HorizontalAlignment = HorizontalAlignments.Centered;
cellXF.Font.FontFamily = FontFamilies.Roman;//设置字体 默认为宋体
for (int ColIndex = ; ColIndex < ds.Tables[].Columns.Count; ColIndex++)
{
//第一行表头
cells.Add(, ColIndex + , ds.Tables[].Columns[ColIndex].Caption, cellXF);
} int f = ;
var thisSheetCount = i == ? eachSheetCount : (mCount - i * eachSheetCount);
for (int m = ; m < thisSheetCount; m++)
{
f++;
var thisrowCount = (i * eachSheetCount) + m;
for (int CellIndex = ; CellIndex < ds.Tables[].Columns.Count; CellIndex++)
{
cells.Add(f, CellIndex + , ds.Tables[].Rows[thisrowCount][ds.Tables[].Columns[CellIndex].ColumnName].ToString(), cellXF);
}
}
} doc.Send();
response.Flush();
response.End();
} #region 读写Excel
/// <summary>
/// 读取Excel数据
/// </summary>
/// <param name="FileName"></param>
public static void Read(string FileName)
{
AppLibrary.ReadExcel.Workbook workbook = null;
workbook = AppLibrary.ReadExcel.Workbook.getWorkbook(FileName);
int k = ;
System.Text.StringBuilder sb = new System.Text.StringBuilder();
foreach (AppLibrary.ReadExcel.Sheet sheet in workbook.Sheets)
{
k++;
sb.Append("当前为第" + k + "个Sheet<br/><br/>");
sb.Append("<table class='scroll' cellpadding=0 cellspacing=0>");
for (int iRow = ; iRow < sheet.Rows; iRow++)
{
sb.Append("<tr>");
sb.Append("<td>");
sb.Append("当前为第" + (iRow + ) + "行");
sb.Append("</td>");
for (int iCol = ; iCol < sheet.Columns; iCol++)
{
AppLibrary.ReadExcel.Cell cell = sheet.getCell(iCol, iRow);
object val = cell.Value; string cellValue = (val != null) ? val.ToString() : ""; sb.Append("<td>");
sb.Append(cellValue);
sb.Append("</td>"); }
sb.Append("</tr>");
}
sb.Append("</table><br/><br/>");
}
HttpContext.Current.Response.Write(sb.ToString()); } /// <summary>
///
/// </summary>
/// <param name="ds">DataSet对象</param>
/// <param name="ExportNo">保存的Excel文件名</param>
/// <param name="response">当前的HttpResponse对象</param>
/// <param name="sheetNames">Excel表格名 和 DadaSet对象中的表个数一一对应</param>
public static void ToExcel(DataSet ds, string ExportNo, HttpResponseBase response, string[] sheetNames)
{
//GC.Collect();
AppLibrary.WriteExcel.XlsDocument doc = new AppLibrary.WriteExcel.XlsDocument(); doc.FileName = ExportNo + ".xls";
string SheetName = string.Empty;
int mCount = ; for (int i = ; i < sheetNames.Length; i++)
{
SheetName = sheetNames[i];
//记录条数
mCount = ds.Tables[].Rows.Count;
AppLibrary.WriteExcel.Worksheet sheet = doc.Workbook.Worksheets.Add(SheetName);
AppLibrary.WriteExcel.Cells cells = sheet.Cells; //创建列样式创建列时引用
XF cellXF = doc.NewXF();
cellXF.VerticalAlignment = VerticalAlignments.Centered;
cellXF.HorizontalAlignment = HorizontalAlignments.Centered;
cellXF.Font.FontFamily = FontFamilies.Roman;//设置字体 默认为宋体
for (int ColIndex = ; ColIndex < ds.Tables[i].Columns.Count; ColIndex++)
{
//第一行表头
cells.Add(, ColIndex + , ds.Tables[i].Columns[ColIndex].Caption, cellXF);
} int f = ;
for (int m = ; m < mCount; m++)
{
f++; for (int CellIndex = ; CellIndex < ds.Tables[i].Columns.Count; CellIndex++)
{
cells.Add(f, CellIndex + , ds.Tables[i].Rows[m][ds.Tables[i].Columns[CellIndex].ColumnName].ToString(), cellXF);
}
}
} doc.Send();
response.Flush();
response.End();
} #endregion
}
Excel数据导入导出的更多相关文章
- ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
这篇文章主要介绍了ThinkPHP使用PHPExcel实现Excel数据导入导出,非常实用的功能,需要的朋友可以参考下 本文所述实例是使用在Thinkphp的开发框架上,要是使用在其他框架也是同样的方 ...
- Access中一句查询代码实现Excel数据导入导出
摘 要:用一句查询代码,写到vba中实现Excel数据导入导出,也可把引号中的SQL语句直接放到查询分析器中执行正 文: 导入数据(导入数据时第一行必须是字段名): DoCmd.RunSQL &quo ...
- OpenXml Excel数据导入导出(含图片的导入导出)
声明:里面的很多东西是基于前人的基础上实现的,具体是哪些人 俺忘了,我做了一些整合和加工 这个项目居于openxml做Excel的导入导出,可以用OpenXml读取Excel中的图片 和OpenXml ...
- QC学习三:Excel数据导入导出QC操作流程
环境: QC9 WindowsXP Office2007 1. 准备 1.通过Excel导入QC,需要下载Microsoft Excel Add-in: http://update.externa ...
- 1、数据库与excel表格的数据导入导出
1.居民用户界面中,excel数据导入导出: 2.其他5张表数据显示到本角色主页的container容器中.
- C# excel文件导入导出
欢迎关注微信公众号 C#编程大全 这里有更多入门级实例帮你快速成长 在C#交流群里,看到很多小伙伴在excel数据导入导出到C#界面上存在疑惑,所以今天专门做了这个主题,希望大家有所收获! 环境:wi ...
- SQL SERVER 与ACCESS、EXCEL的数据导入导出转换
* 说明:复制表(只复制结构,源表名:a 新表名:b) select * into b from a where 1<>1 * 说明:拷贝表(拷贝数据,源表名:a 目标表名:b) ...
- 使用pentaho工具将数据库数据导入导出为Excel
写在前面:本篇博客讲述的是如何使用pentaho工具快速的将数据库数据导出为Excel文件,以及如何将Excel文件数据导入数据库. 补充:使用此工具并不需要任何一句代码并能快速便捷解决实际问题,此工 ...
- NodeJs之EXCEL文件导入导出MongoDB数据库数据
NodeJs之EXCEL文件导入导出MongoDB数据库数据 一,介绍与需求 1.1,介绍 (1),node-xlsx : 基于Node.js解析excel文件数据及生成excel文件. (2),ex ...
随机推荐
- Struts-2.3.24.1官方例子-struts2-blank
一.配置文件 1.web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app id=&qu ...
- 12232 - Exclusive-OR
12232 - Exclusive-OR 题目大意是可以设定一个点Xp=v,或者Xp^Xq=v,然后查询Xa^Xb^Xc...等于多少. 由于异或操作跟判连通性很类似,这里可以使用并查集来解决,对于X ...
- tcp断开的4次挥手
http://blog.csdn.net/fw0124/article/details/7452695 由于TCP连 接是全双工的,因此每个方向都必须单独进行关闭.这原则是当一方完成它的数据发送任务后 ...
- naotu.baidu.com 非常棒的脑图在线工具
1.png 2.txt 短租 前台功能 房源查看 房源搜索 城市房源 注册登录 预定房源 房源退订 在线支付 评价房源 个人中心 我的订单 我的账户 我的收藏 消息通知 管理员后台 房源发布 会员管理 ...
- JSON 之JAVA 解析
一. JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧. Json建构于两种结构: 1.“名称/值”对的集合(A collection ...
- Codeforces Round #228 (Div. 2) C. Fox and Box Accumulation(贪心)
题目:http://codeforces.com/contest/389/problem/C 题意:给n个箱子,给n个箱子所能承受的重量,每个箱子的重量为1: 很简单的贪心,比赛的时候没想出来.... ...
- Oracle排序BUG
在今天项目开发中,遇到一个奇怪的问题,运用Oracle自身排序,然后将排序结果进行分页展示到前台时,发现数据有重复的现象. 这是数据表需要排序的全部结果,执行脚本:select * from ajb ...
- hdu 2639 Bone Collector II
Bone Collector II Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- tomcat+dbcp+jndi 配置
1)添加jar包 tomcat6中 TOMCAT_HOME/lib 下是公用jar包 dbcp需要3个jar包:Jakarta-Commons DBCP,Jakarta-Commons Collect ...
- SharePoint 2010 master page 控件介绍(5):其他
转:http://blog.csdn.net/lgm97/article/details/6409227 <!-- 处理搜索按下"enter"键和点击后退按钮 --> ...