1、在导入向导对话框中单击下一步,进入到选择数据源对话框,在数据源列表中选择MicrosoftExcel,同时选择相应的Excel文档;
2、完成后单击下一步指定目标数据库服务,依次单击下一步至到完成;
3、重新打到SQLServerManagementStudio,进入到导入的数据库表,可以发现所导入的Excel文档数据。
三种经典方法:1.方法一:采用OleDB读取EXCEL文件:
把EXCEL文件当做一个数据源来进行数据的读取 *** 作,实例如下:
public DataSet ExcelToDS(string Path)
{
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0" +"Data Source="+ Path +""+"Extended Properties=Excel 8.0"
OleDbConnection conn = new OleDbConnection(strConn)
conn.Open()
string strExcel = ""
OleDbDataAdapter myCommand = null
DataSet ds = null
strExcel="select * from [sheet1$]"
myCommand = new OleDbDataAdapter(strExcel, strConn)
ds = new DataSet()
myCommand.Fill(ds,"table1")
return ds
}
对于EXCEL中的表即sheet([sheet1$])如果不是固定的可以使用下面的方法得到
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0" +"Data Source="+ Path +""+"Extended Properties=Excel 8.0"
OleDbConnection conn = new OleDbConnection(strConn)
DataTable schemaTable = objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables,null)
string tableName=schemaTable.Rows[0][2].ToString().Trim()
另外:也可进行写入EXCEL文件,实例如下:
public void DSToExcel(string Path,DataSet oldds)
{
//先得到汇总EXCEL的DataSet 主要目的是获得EXCEL在DataSet中的结构
string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 Data Source ="+path1+"Extended Properties=Excel 8.0"
OleDbConnection myConn = new OleDbConnection(strCon)
string strCom="select * from [Sheet1$]"
myConn.Open ( )
OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom, myConn )
ystem.Data.OleDb.OleDbCommandBuilder builder=new OleDbCommandBuilder(myCommand)
//QuotePrefix和QuoteSuffix主要是对builder生成InsertComment命令时使用。
builder.QuotePrefix="["//获取insert语句中保留字符(起始位置)
builder.QuoteSuffix="]"//获取insert语句中保留字符(结束位置)
DataSet newds=new DataSet()
myCommand.Fill(newds ,"Table1")
for(int i=0i<oldds.Tables[0].Rows.Counti++)
{
//在这里不能使用ImportRow方法将一行导入到news中,因为ImportRow将保留原来DataRow的所有设置(DataRowState状态不变)。
在使用ImportRow后newds内有值,但不能更新到Excel中因为所有导入行的DataRowState!=Added
DataRow nrow=aDataSet.Tables["Table1"].NewRow()
for(int j=0j<newds.Tables[0].Columns.Countj++)
{
nrow[j]=oldds.Tables[0].Rows[i][j]
}
newds.Tables["Table1"].Rows.Add(nrow)
}
myCommand.Update(newds,"Table1")
myConn.Close()
}
2.方法二:引用的com组件:Microsoft.Office.Interop.Excel.dll 读取EXCEL文件
首先是Excel.dll的获取,将Office安装目录下的Excel.exe文件Copy到DotNet的bin目录下,cmd到该目录下,运行 TlbImp EXCEL.EXE Excel.dll 得到Dll文件。 点击此处下载此文件:/Files/songliang/DLL文件.rar
再在项目中添加引用该dll文件.
//读取EXCEL的方法 (用范围区域读取数据)
private void OpenExcel(string strFileName)
{
object missing = System.Reflection.Missing.Value
Application excel = new Application()//lauch excel application
if (excel == null)
{
Response.Write("<script>alert('Can't access excel')</script>")
}
else
{
excel.Visible = false excel.UserControl = true
// 以只读的形式打开EXCEL文件
Workbook wb = excel.Application.Workbooks.Open(strFileName, missing, true, missing, missing, missing,
missing, missing, missing, true, missing, missing, missing, missing, missing)
//取得第一个工作薄
Worksheet ws = (Worksheet)wb.Worksheets.get_Item(1)
//取得总记录行数 (包括标题列)
int rowsint = ws.UsedRange.Cells.Rows.Count//得到行数
//int columnsint = mySheet.UsedRange.Cells.Columns.Count//得到列数
//取得数据范围区域 (不包括标题列)
Range rng1 = ws.Cells.get_Range("B2", "B" + rowsint) //item
Range rng2 = ws.Cells.get_Range("K2", "K" + rowsint) //Customer
object[,] arryItem= (object[,])rng1.Value2 //get range's value
object[,] arryCus = (object[,])rng2.Value2
//将新值赋给一个数组
string[,] arry = new string[rowsint-1, 2]
for (int i = 1i <= rowsint-1i++)
{
//Item_Code列
arry[i - 1, 0] =arryItem[i, 1].ToString()
//Customer_Name列
arry[i - 1, 1] = arryCus[i, 1].ToString()
}
Response.Write(arry[0, 0] + " / " + arry[0, 1] + "#" + arry[rowsint - 2, 0] + " / " + arry[rowsint - 2, 1])
}
excel.Quit() excel = null
Process[] procs = Process.GetProcessesByName("excel")
foreach (Process pro in procs)
{
pro.Kill()//没有更好的方法,只有杀掉进程
}
GC.Collect()
}
3.方法三:将EXCEL文件转化成CSV(逗号分隔)的文件,用文件流读取(等价就是读取一个txt文本文件)。
先引用命名空间:using System.Text和using System.IO
FileStream fs = new FileStream("d:\\Customer.csv", FileMode.Open, FileAccess.Read, FileShare.None)
StreamReader sr = new StreamReader(fs, System.Text.Encoding.GetEncoding(936))
string str = ""
string s = Console.ReadLine()
while (str != null)
{str = sr.ReadLine()
string[] xu = new String[2]
xu = str.Split(',')
string ser = xu[0]
string dse = xu[1] if (ser == s)
{ Console.WriteLine(dse)break
}
} sr.Close()
另外也可以将数据库数据导入到一个txt文件,实例如下:
//txt文件名
string fn = DateTime.Now.ToString("yyyyMMddHHmmss") + "-" + "PO014" + ".txt"
OleDbConnection con = new OleDbConnection(conStr)
con.Open()
string sql = "select ITEM,REQD_DATE,QTY,PUR_FLG,PO_NUM from TSD_PO014"
//OleDbCommand mycom = new OleDbCommand("select * from TSD_PO014", mycon)
//OleDbDataReader myreader = mycom.ExecuteReader() //也可以用Reader读取数据
DataSet ds = new DataSet()
OleDbDataAdapter oda = new OleDbDataAdapter(sql, con)
oda.Fill(ds, "PO014")
DataTable dt = ds.Tables[0]
FileStream fs = new FileStream(Server.MapPath("download/" + fn), FileMode.Create, FileAccess.ReadWrite)
StreamWriter strmWriter = new StreamWriter(fs) //存入到文本文件中
//把标题写入.txt文件中
//for (int i = 0i <dt.Columns.Counti++)
//{
//strmWriter.Write(dt.Columns[i].ColumnName + " ")
//}
foreach (DataRow dr in dt.Rows)
{
string str0, str1, str2, str3
string str = "|" //数据用"|"分隔开
str0 = dr[0].ToString()
str1 = dr[1].ToString()
str2 = dr[2].ToString()
str3 = dr[3].ToString()
str4 = dr[4].ToString().Trim()
strmWriter.Write(str0)
strmWriter.Write(str)
strmWriter.Write(str1)
strmWriter.Write(str)
strmWriter.Write(str2)
strmWriter.Write(str)
strmWriter.Write(str3)
strmWriter.WriteLine() //换行
}
strmWriter.Flush()
strmWriter.Close()
if (con.State == ConnectionState.Open)
{
con.Close()
}
众所周知 WEB上的打印是比较困难的 常见的WEB上打印的方法大概有三种 直接利用IE的打印功能 一般来说 这种方法可以做些扩展 而不是单单的调用javascript:print()这样简单 比如 可以使用如下代码 <OBJECTid=WebBrowser classid=CLSID: F A D A B C FD A height= width= ></OBJECT><inputtype=button value=打印 onclick=document all WebBrowser ExecWB( )><inputtype=button value=直接打印 onclick=document all WebBrowser ExecWB( )><inputtype=button value=页面设置 onclick=document all WebBrowser ExecWB( )><inputtype=button value=打印预览 onclick=document all WebBrowser ExecWB( )>这种方法可以适用于简单的数据打印 对系统要求不高 但不足之处在于可以控制的能力比较差 比如处理分页等问题 利用水晶报表或其他第三方工具 如微软的Reporting service 水晶报表或其他第三方控件的打印 一般是导出到Excel WORD PDF等再进行打印的 效果比较好 但编程比较复杂 控制起来也不大方便 而且这些工具都是要收费的 将数据库的数据或要打印的内容导出到Excel Word中去打印 使用这种方法 可以在服务端或者客户端进行 在服务端使用的话 要求服务端要安装Word Excel 在客户端使用的话 要求客户端在IE的安全设置上有一定要求 使用这种方法 可适应性比较强 控制较好 本文将以在ASP NET中使用Excel为例子 介绍如何将数据导出到Excel的几种方法 首先 先介绍在服务端使用Excel的方法 要在服务器端使用Excel 必须要求服务器端安装Excel 并且要求一定的访问权限 比如 需要添加<identity impersonate= true />到nfig中 在本文中 要给予WEB目录可写的权限 接下来 使用VS NET 新建一个VB NET的工程 并添加引用 由于我们要使用的是Excel 所以添加一个关于的应用 这里添加的是Microsoft Excel Object Library 之后 添加的代码如下 Imports System Runtime InteropServices MarshalImports OfficePrivate Sub Page_Load(ByVal sender As System Object ByVal e As System EventArgs) Handles MyBase Load 以方式处理ExcelDim oExcel As New Excel ApplicationDim oBooks As Excel Workbooks oBook As Excel WorkbookDim oSheets As Excel Sheets oSheet As Excel WorksheetDim oCells As Excel RangeDim sFile As String sTemplate As String 定义一个datatableDim dt As DataTable = CType(Application Item( MyDataTable ) DataTable)sFile = Server MapPath(Request ApplicationPath) &\MyExcel xls 定义模版文件sTemplate = Server MapPath(Request ApplicationPath) &\MyTemplate xls oExcel Visible = FalseoExcel DisplayAlerts = False 定义一个新的工作簿oBooks = oExcel WorkbooksoBooks Open(Server MapPath(Request ApplicationPath) &\MyTemplate xls ) oBook = oBooks Item( )oSheets = oBook WorksheetsoSheet = CType(oSheets Item( ) Excel Worksheet) 命名该sheetoSheet Name = First Sheet oCells = oSheet Cells 调用dumpdata过程 将数据导入到Excel中去DumpData(dt oCells) 保存oSheet SaveAs(sFile)oBook Close() 退出Excel 并且释放调用的资源oExcel Quit()ReleaseComObject(oCells) : ReleaseComObject(oSheet)ReleaseComObject(oSheets) : ReleaseComObject(oBook)ReleaseComObject(oBooks) : ReleaseComObject(oExcel)oExcel = Nothing : oBooks = Nothing : oBook = NothingoSheets = Nothing : oSheet = Nothing : oCells = NothingSystem GC Collect()Response Redirect(sFile)End Sub 将DATATABLE的内容导出到Excel的单元格中去Private Function DumpData(ByVal dt As DataTable ByVal oCells As Excel Range) As StringDim dr As DataRow ary() As ObjectDim iRow As Integer iCol As Integer 输出列标题For iCol = To dt Columns Count oCells( iCol + ) = dt Columns(iCol) ToStringNext 将数据导出到相应的单元格For iRow = To dt Rows Count dr = dt Rows Item(iRow)ary = dr ItemArrayFor iCol = To UBound(ary)oCells(iRow + iCol + ) = ary(iCol) ToStringResponse Write(ary(iCol) ToString &vbTab)NextNextEnd FunctionEnd Class在上面的代码中 首先 先定义了一些关于Excel的对象 如application workbook sheets sheet等 这些都是在使用Excel的对象时 必不可少的 之后 我们事先先定义了一个Excel的模版文件 并且用Excel先打开这个模版文件 再调用一个自定义的过程dumpdata 在这个自定义的过程中 将datatable中的数据 逐一导入到Excel的单元格中去 读者自己可以慢慢体会下 上面的代码中 是如何将datatable中的数据导出到Excel中去的 程序运行后 可以在当前的工作目录下 生成名为myExcel xls的Excel文件 如下图 大家可能觉得上面的代码比较复杂 因为上面对于对打印要求比较高的应用 是十分有效的 如果只是单单对数据进行导出 还可以使用简单的格式 比如使用以下的代码 Private Sub Page_Load(ByVal sender As System Object ByVal e As System EventArgs) Handles MyBase LoadDim dt As DataTable = CType(Application Item( MyDataTable ) DataTable)Response ContentType = application/ms Excel Response AddHeader( Content Disposition inlinefilename=test xls )Response Write(ConvertDtToTDF(dt))End SubPrivate Function ConvertDtToTDF(ByVal dt As DataTable) As StringDim dr As DataRow ary() As Object i As IntegerDim iCol As Integer 输出列标题For iCol = To dt Columns Count Response Write(dt Columns(iCol) ToString &vbTab)NextResponse Write(vbCrLf) 输出数据For Each dr In dt Rowsary = dr ItemArrayFor i = To UBound(ary)Response Write(ary(i) ToString &vbTab)NextResponse Write(vbCrLf)NextEnd FunctionEnd Class在上面的代码中 首先将浏览器的输出类型设置为application/ms Excel 并设置Excel的输出类型是在浏览器中输出 默认的名字为test xls 之后 将调用自定义的过程 该自定义的过程将一个datatable里的数据以字符串流的形式输出 其中每个datatable里的数据之间以TAB制表符分隔 最后再输出到浏览器 输出效果如下图 上面的这种方法 表现的形式比较简单 但也可以满足数据导出的基本要求 那如果要进一步修饰一下的话 要如何做呢?这里提供一个方法 可以将要导出的数据先绑定到datagrid 然后再打印该datagrid 这时就可以对要打印出来的datagrid进行格式化 设置datagrid的format等属性 代码如下 Protected Overrides Sub Render(ByVal writer As System Web UI HtmlTextWriter)Dim dt As DataTable = CType(Application Item( MyDataTable ) DataTable)Response ContentType = application/ms Excel Response AddHeader( Content Disposition inlinefilename=test xls )DataGrid DataSource = dtDataGrid DataBind()DataGrid RenderControl(writer)End Sub打印出来的效果如下图 如果要转到Word里面打印的话 也同样可以用上面的方法 只需要将其中的代码改成 Response ContentType = application/ms word Response AddHeader( Content Disposition inlinefilename=test doc )最后 来看一下 如何调用客户端的Excel进行打印 就是让客户一点击 打印 的按钮 就可以自动打开客户端的Excel 将要打印的内容导入 要实现这样的效果 必须要求客户端的IE浏览器设置中 在其中的 安全 本地Intranet 自定义级别中 将 下载未签名ACTIVX 中设置为启动或提示 代码如下 <script language= vbscript >Sub exportbutton_onclickDim sHTML oExcel oBookSHTML = em( DataGrid ) outerSet oExcel = CreateObject( Excel Application )Set oBook = oExcel Workbooks AddoBook HTMLProject HTMLProjectItems( Sheet ) Text = sHTMLoBook HTMLProject lishixinzhi/Article/program/net/201311/13741
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)