首页 > 技术文章 > access 笔记

iflybutter 2021-01-03 10:39 原文

Sub 添加记录access2007()
Dim cnn As New ADODB.Connection
Dim Cat As New ADOX.Catalog
Dim MyData$, MyFile, n%
MyData = ThisWorkbook.Path & "\数据库.accdb"
On Error Resume Next
If Dir(MyData) = "" Then
Cat.Create "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & MyData
Else
Cat.ActiveConnection = "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & MyData
Cat.Tables.Delete "数据表1"
End If
Set Cat = Nothing
On Error GoTo 0
cnn.Open "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & MyData
Mypath = ThisWorkbook.Path & "\"
MyFile = Dir(Mypath & "*.xlsx")
Do While MyFile <> ""
n = n + 1
If n = 1 Then
cnn.Execute "select * into 数据表1 from [Excel 12.0;Database=" & Mypath & MyFile & "].[Sheet1$]"
Else
cnn.Execute "insert into 数据表1 select * from [Excel 12.0;Database=" & Mypath & MyFile & "].[Sheet1$]"
End If
MyFile = Dir()
Loop
cnn.Close
Set cnn = Nothing
MsgBox "ok"
End Sub

 

 

Sub setNewTable()
    Dim Cat As New ADOX.Catalog
    Dim tb1 As ADOX.Table
    Dim cnn As New ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim MyPath As String
    Dim MyName As String
    Dim sh As String
    Dim i As Long
    cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\数据库.accdb"
    MyPath = ThisWorkbook.Path & "\"
    MyName = Dir(MyPath & "*.xlsx")
    Do While MyName <> ""
        Cat.ActiveConnection = "Provider=Microsoft.Ace.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & MyPath & MyName
        For Each tb1 In Cat.Tables
            If tb1.Type = "TABLE" Then
                sh = Replace(tb1.Name, "'", "")
                If Right(sh, 1) = "$" Then
                    i = i + 1
                    myTable = Replace(sh, "$", "")
                    Set rs = cnn.OpenSchema(adSchemaTables, Array(Empty, Empty, myTable, Empty))
                    If Not rs.EOF Then cnn.Execute "DROP TABLE " & myTable
                    cnn.Execute "CREATE TABLE " & myTable & "(日期 date not null primary key,数量 long not null)"
                    cnn.Execute "INSERT INTO " & myTable & " SELECT f1 as 日期,f2 as 数量 FROM [Excel 12.0;Hdr=No;Database=" & MyPath & MyName & ";].[" & sh & "]"
                End If
            End If
        Next
        MyName = Dir
    Loop
    MsgBox "已成功生成" & i & "个数据表。", vbInformation
    Set Cat = Nothing
    rs.Close
    cnn.Close
    Set rs = Nothing
    Set cnn = Nothing
End Sub

 

 

公式转数字

1、将原公式整体*1。

2、在原公式整体前添加“--”符号。

 

 

 

Sub 合并目录所有工作簿全部工作表()

 

Dim MP, MN, AW, Wbn, wn

 

Dim Wb As Workbook

 

Dim i, a, b, d, c, e

 

Application.ScreenUpdating = False

 

MP = ActiveWorkbook.Path

 

MN = Dir(MP & "\" & "*.xls")

 

AW = ActiveWorkbook.Name

 

Num = 0

 

e = 1

 

Do While MN <> ""

 

If MN <> AW Then

 

Set Wb = Workbooks.Open(MP & "\" & MN)

 

a = a + 1

 

With Workbooks(1).ActiveSheet

 

For i = 1 To Sheets.Count

 

If Sheets(i).Range("a1") <> "" Then

 

Wb.Sheets(i).Range("a1").Resize(1, Sheets(i).UsedRange.Columns.Count).Copy .Cells(1, 1)

 

d = Wb.Sheets(i).UsedRange.Columns.Count

 

c = Wb.Sheets(i).UsedRange.Rows.Count - 1

 

wn = Wb.Sheets(i).Name

 

.Cells(1, d + 1) = "表名"

 

.Cells(e + 1, d + 1).Resize(c, 1) = MN & wn

 

e = e + c

 

Wb.Sheets(i).Range("a2").Resize(c,d).Copy .Cells(.Range("a1048576").End(xlUp).Row + 1, 1)

 

End If

 

Next

 

Wbn = Wbn & Chr(13) & Wb.Name

 

Wb.Close False

 

End With

 

End If

 

MN = Dir

 

Loop

 

Range("a1").Select

 

Application.ScreenUpdating = True

 

MsgBox "共合并了" & a & "个工作薄下全部工作表。如下:" & Chr(13) & Wbn, vbInformation, "提示"

 

End Sub

 

 

使用以下语法设置“控件来源”:

 

=[Forms]![form name]![control name]

 

其中窗体名称是要显示其值的控件所在的窗体的名称,控件名称是控件的名称。

 

引用子窗体上的控件会稍微复杂一些。在这种情况下,请使用下面这样的语法:

 

=[Forms]![main form name]![name of the subform control on the main form].[Form]![control name on the subform]

 

其中“main form name”是主窗体的名称,“name of the subform control on the main form”是作为子窗体容器的主窗体上的控件名称,“control name on the subform”是子窗体上的控件名称,该子窗体包含要显示其值的控件。

 

1.AutoExec宏(如果向数据库中添加一个名为 AutoExec Access 宏,通常情况下,每次打开数据库时,该宏都会先自动运行。)

2.备份模块(在Auto宏中运行该函数)

 

Public Function gf_Bakup()

 

  Set fs = CreateObject("Scripting.FileSystemObject")

  fs.copyfile CurrentProject.FullName, CurrentProject.Path & "\bak_" & Date & CurrentProject.Name

 

End Function

Getrows 方法

 

 

Dim oc As Object, rs As Object, a()

Set oc = CreateObject("adodb.connection")

oc.open "provider=Microsoft.Jet.OLEDB.4.0; Data Source=e:\tmp\db2.mdb"

Set rs = CreateObject("adodb.recordset")

rs.open "select * from tek", oc, 1, 1

a = rs.getrows

MsgBox "记录集rs已被读入数组a中" & vbCrLf & "共" & UBound(a, 1) + 1 & "列 " & UBound(a, 2) + 1 & "行"

rs.Close

Set rs = Nothing

oc.Close

Set oc = Nothing

 

 

Sub SQL2Arr()

    Dim AdoCN As Object

    Dim AdoRe As Object

    Dim SQL As String

    Dim Arr1, Arr2, Arr3

    Set AdoCN = CreateObject("ADODB.Connection")

    Set AdoRe = CreateObject("ADODB.Recordset")

    SQL = "SELECT * FROM [Sheet1$A1:C11]"

    AdoCN.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _

                 "Data Source=" & ThisWorkbook.FullName & ";" & _

                 "Extended Properties=Excel 12.0;"

    Set AdoRe = AdoCN.Execute(SQL)

    Arr1 = AdoRe.GetRows(, , "姓名")                    '取得某一列

    AdoRe.MoveFirst     '取完一次,要将指针移动到最前

    Arr2 = AdoRe.GetRows(, , Array("姓名", "班级"))     '取得两列

    AdoRe.MoveFirst     '取完一次,要将指针移动到最前

    Arr3 = AdoRe.GetRows                                '取得全部

    AdoCN.Close

    Set AdoRe = Nothing

    Set AdoCN = Nothing

End Sub

 

 

 

'后期绑定:方便代码在其他电脑上运行,推荐。

dim dic as object

Set dic = CreateObject("scripting.dictionary")

 

'前期绑定:可以直接声明字典对象,有对象属性和方法的提示,但在其他没有勾选引用的电脑上无法正常运行。

'引用勾选:VBE窗体-工具-引用-勾选‘Microsoft Scripting Runtime’

dim dic as New dictionary

 

 

用access自动获取excel里的数据的方法就是通过代码的方式导入。如果是对手动导入比较清楚的话,这个实现起来不难。请参考下面的介绍来实现:
首先,新建一个工程,在工程中引用如下对象ADO对象(用于连接636f70797a686964616f31333337393631ACCESS数据库,可用其它方式)
添加一个窗体(from1),在窗体上添加如下控件:
两个文本框,用来显示EXCEL文件路径和ACCESS路径;
四个扭钮,两个用来游览,另两个是导入和退出;
两个通用对话框控件,用来打开ACCESS和EXCEL文件,一个进度条控件,用来显示导入进程。

实例的导入是将ACCESS数据库中表的字段名单独存放在另外一个表中,导入时按表中所存字段名的顺序进行导入,不是按EXCEL表的顺序导入,请大家注
意.这样在实际中是很实用的.因为好多时候EXCEL表中字段顺序和ACCESS中字段顺序有可能不是一致的.

代码如下:
Dim v
Option Explicit
Private Sub cmdLoad_Click()
Dim excel_app As Object
Dim excel_sheet As Object
If txtExcelFile.Text = "" Then
MsgBox "请选择EXCEL表"
Else
Dim new_value As String
Label2.Caption = "正在导入,请稍候..."
Screen.MousePointer = vbHourglass
DoEvents
'' Create the Excel application.
Set excel_app = CreateObject("Excel.Application")
'' Uncomment this line to make Excel visible.
excel_app.Visible = True
'' Open the Excel spreadsheet.
excel_app.Workbooks.open FileName:=txtExcelFile.Text
'' Check for later versions.
If Val(excel_app.Application.Version) >= 8 Then
Set excel_sheet = excel_app.ActiveSheet
Else
Set excel_sheet = excel_app

End If

Dim u ''求EXCEL表中记录的条数,以便控制进度条
u = 1
Do
If Trim$(excel_sheet.Cells(u, 1)) = "" Then Exit Do
u = u + 1
Loop
bar.Max = u - 1

strSQL = "select * from TestValues"
yourRecord.open strSQL, myConn, adOpenDynamic, adLockOptimistic ''打开记录集
Dim sql As String

sql = "select * from fields order by xue"
myRecord.open sql, myConn, adOpenDynamic, adLockBatchOptimistic ''打开字段记录集
myRecord.MoveFirst

'' Get data from the Excel spreadsheet and insert
'' it into the TestValues table.

Dim v ''导入记录,用了两层循环
v = 1
Do
If Trim$(excel_sheet.Cells(v, 1)) = ""

Then Exit Do ''外层,如果EXCEL表中读取到空行,结束

yourRecord.AddNew

Dim i
For i = 1 To myRecord.RecordCount
'' Get the next value.
new_value = Trim$(excel_sheet.Cells(v, i))
'' See if it''s blank.
''If Len(new_value) = 0 Then Exit Do

'' Insert the value into the database.

Dim bb As String

bb = myRecord("name")

yourRecord(bb) = new_value

myRecord.MoveNext

Next i
bar.Value = v
v = v + 1
myRecord.MoveFirst
Loop
yourRecord.Update

'' Comment the rest of the lines to keep
'' Excel running so you can see it.
'' Close the workbook without saving.
excel_app.ActiveWorkbook.Close False
'' Close Excel.
excel_app.Quit
Set excel_sheet = Nothing
Set excel_app = Nothing
myRecord.Close
yourRecord.Close
Set myRecord = Nothing
Set yourRecord = Nothing
Label2.Caption = "导入完毕"
Screen.MousePointer = vbDefault
MsgBox "共导入" & Format$(v - 1) & "条记录"

End If
End Sub
Private Sub Command1_Click()
Unload Me
End Sub
Private Sub Command2_Click(Index As Integer)
''寻找ACCESS数据库
CommonDialog1.Filter = "ACCESS 文件(*.mdb)|*.mdb"
CommonDialog1.CancelError = True
CommonDialog1.ShowOpen
txtAccessFile.Text = CommonDialog1.FileName
End Sub
Private Sub Command3_Click()
''寻找excel数据库
CommonDialog2.Filter = "excel 文件(*.xls)|*.xls"
CommonDialog2.CancelError = True
CommonDialog2.ShowOpen
txtExcelFile.Text = CommonDialog2.FileName
End Sub

Private Sub Form_Load()
Call Module1.lianjie
txtAccessFile.Text = datapath
End Sub
模块(module1)中的代码如下:
Public myConn As New ADODB.Connection ''定义连接字符串
Public myRecord As New ADODB.Recordset ''定义记录集(字段)
Public yourRecord As New ADODB.Recordset ''定义记录集(数据)
Public cntoad As Boolean ''是否正常连接
Public ml ''姓名字段所在列
Public strSQL ''查询字符串
Public MyDatabase As Database ''定义数据库名
Public MyTable As TableDef, MyField As Field ''定义表名和字段名
Public xuehao ''读取字段序号
Public goshiRecord As New ADODB.Recordset ''定义记录集(公式)
Public hxfyn As Boolean
Public hxfbds '' 公式或条件
Public duan ''要统计的字段
Public islinshi As Boolean ''是否为临时公式
Public leiRecord As New ADODB.Recordset ''定义记录集(工资类别)
Public datapath As String ''数据库路径及名
Public table As String ''工资表名
Public lei As String '' 工资类别
Public Sub lianjie() ''打开数据库
On Error Resume Next
myConn.Close
Dim mySQL As String
''设定连接字符串
mySQL = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;"
mySQL = mySQL + "Data Source=" & datapath

myConn.ConnectionString = mySQL ''设定连接

myConn.open ''打开连接
myRecord.ActiveConnection = myConn ''设定RecordSeet的连接对象为Connection
myRecord.CursorLocation = adUseClient
goshiRecord.ActiveConnection = myConn ''设定RecordSeet的连接对象为Connection
goshiRecord.CursorLocation = adUseClient
yourRecord.ActiveConnection = myConn ''设定RecordSeet的连接对象为Connection
yourRecord.CursorLocation = adUseClient
End Sub

 

表格字段a b c 与字段公式组成结果

 

计算结果: Eval(Replace(Replace(Replace([公式],"A",[A]),"B",[B]),"C",[C]))

 

using System;

using System.Collections.Generic;

using System.Text;

using System.Configuration;

using Microsoft.Office.Interop.Excel;

using System.Data;

using System.Reflection;

using System.Data.OleDb;

 

namespace SOSP.Common

{

    /// <summary>

    /// C#与Excel交互类

    /// </summary>

    public class ExcelHelper

    {

        #region 导出到Excel

        #region ExportExcelForDataTable

        /// <summary>

        /// 从DataTable导出Excel,指定列别名,指定要排除的列

        /// </summary>

        /// <param name="dt">DataTable</param>

        /// <param name="excelPathName">含Excel名称的保存路径 在pathType=1时有效,其它请赋值空字符串</param>

        /// <param name="pathType">路径类型。只能取值:0客户自定义路径;1服务端定义路径,标识文件保存路径是服务端指定还是客户自定义路径及文件名</param>

        /// <param name="colName">各列的列名List string </param>

        /// <param name="excludeColumn">要显示/排除的列</param>

        /// <param name="excludeType">显示/排除列方式 0为所有列 1指定的为要显示的列 2指定的为要排除的列</param>

        /// <param name="sheetName">sheet1的名称 为空字符串时保持默认名称</param>

        /// <param name="TemplatePath">模版在项目服务器中路径 例:tp.xlsx 为空字符串时表示无模版</param>

        /// <param name="TemplateRow">模版中已存在数据的行数,无模版时请传入参数 0</param>

        /// <param name="exDataTableList">扩展 DataTable List 用于当上下两个及以上DataTable数据类型不一至,但又都在同一列时使用,要求格式与参数第一个 DataTable的列名字段名一至,仅字段类型可不同</param>

        /// <returns>bool</returns>

        public static bool ToExcelForDataTable(System.Data.DataTable dt, string excelPathName, string pathType, List<string> colName, List<string> excludeColumn, string excludeType, string sheetName, string TemplatePath, int TemplateRow, List<System.Data.DataTable> exDataTableList)

        {

            try

            {

                if (dt == null || dt.Rows.Count == 0) return false;

                Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();

                if (xlApp == null)

                {

                    return false;

                }

                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 = null;

                if (TemplatePath == "")

                {

                    workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);

                }

                else

                {

                    workbook = workbooks.Add(TemplatePath); //加载模板

                }

                Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];

                Microsoft.Office.Interop.Excel.Range range;

 

                long totalCount = dt.Rows.Count;

                if (exDataTableList != null && exDataTableList.Count > 0)

                {

                    foreach (System.Data.DataTable item in exDataTableList)

                    {

                        totalCount += item.Rows.Count;

                    }

                }

                long rowRead = 0;

                float percent = 0;

                string exclStr = "";//要排除的列临时项

                object exclType;//DataTable 列的类型,用于做

                int colPosition = 0;//列位置

                if (sheetName != null && sheetName != "")

                {

                    worksheet.Name = sheetName;

                }

                #region 列别名判定

                if (TemplatePath == "")

                {

                    if (colName != null && colName.Count > 0)

                    {

                        #region 指定了列别名

                        for (int i = 0; i < colName.Count; i++)

                        {

                            worksheet.Cells[1, i + 1] = colName[i];

                            range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, i + 1];

                            range.Interior.ColorIndex = 15;

                            range.Font.Bold = true;

                            exclType = dt.Columns[i].DataType.Name;

                            if (exclType.ToString() != "DateTime")

                            {

                                //range.EntireColumn.AutoFit();//全局自动调整列宽,不能再使用单独设置

                                ((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, i + 1]).Columns.AutoFit();

                            }

                            else

                            {

                                //规定列宽

                                ((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, i + 1]).Columns.ColumnWidth = 20;

                            }

                            //((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, i + 1]).Columns.ColumnWidth = 20;

                        }

                        #endregion

                    }

                    else

                    {

                        #region 未指定别名

                        for (int i = 0; i < dt.Columns.Count; i++)

                        {

                            worksheet.Cells[1, i + 1] = dt.Columns[i].ColumnName;

                            range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, i + 1];

                            range.Interior.ColorIndex = 15;

                            range.Font.Bold = true;

                            exclType = dt.Columns[i].DataType.Name;

                            if (exclType.ToString() != "DateTime")

                            {

                                //range.EntireColumn.AutoFit();//全局自动调整列宽,不能再使用单独设置

                                ((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, i + 1]).Columns.AutoFit();

                            }

                            else

                            {

                                //规定列宽

                                ((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, i + 1]).Columns.ColumnWidth = 20;

                            }

                            //((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, i + 1]).Columns.ColumnWidth = 20;

                        }

                        #endregion

                    }

                }

                else

                {

                    //用了模版,不加载标题

                }

                #endregion

                #region 显示/排除列判定

                if (excludeColumn != null && excludeColumn.Count > 0)

                {

                    switch (excludeType)

                    {

                        case "0":

                            {

                                #region 0为显示所有列

                                #region 常规项

                                int r = 0;

                                for (r = 0; r < dt.Rows.Count; r++)

                                {

                                    colPosition = 0;

                                    for (int i = 0; i < dt.Columns.Count; i++)

                                    {

                                        if (TemplatePath == "")

                                        {

                                            worksheet.Cells[r + 2, colPosition + 1] = dt.Rows[r][i].ToString();

                                        }

                                        else

                                        {

                                            worksheet.Cells[r + TemplateRow, colPosition + 1] = dt.Rows[r][i].ToString();

                                        }

                                        colPosition++;

                                    }

                                    rowRead++;

                                    percent = ((float)(100 * rowRead)) / totalCount;

                                }

                                #endregion

                                #region 扩展项

                                if (exDataTableList != null && exDataTableList.Count > 0)

                                {

                                    foreach (System.Data.DataTable item in exDataTableList)

                                    {

                                        for (int k = 0; k < item.Rows.Count; r++, k++)

                                        {

                                            colPosition = 0;

                                            //生成扩展 DataTable 每行数据

                                            for (int t = 0; t < item.Columns.Count; t++)

                                            {

                                                if (TemplatePath == "")

                                                {

                                                    worksheet.Cells[r + 2, colPosition + 1] = item.Rows[k][t].ToString();

                                                }

                                                else

                                                {

                                                    worksheet.Cells[r + TemplateRow, colPosition + 1] = item.Rows[k][t].ToString();

                                                }

                                                colPosition++;

                                            }

                                            rowRead++;

                                            percent = ((float)(100 * rowRead)) / totalCount;

                                        }

                                    }

                                }

                                #endregion

                                #endregion

                            }; break;

                        case "1":

                            {

                                #region 1指定的为要显示的列

                                #region 常规项

                                int r = 0;

                                for (r = 0; r < dt.Rows.Count; r++)

                                {

                                    colPosition = 0;

                                    for (int i = 0; i < dt.Columns.Count; i++)

                                    {

                                        exclStr = dt.Columns[i].ColumnName;

                                        if (excludeColumn.Contains(exclStr))

                                        {

                                            if (TemplatePath == "")

                                            {

                                                worksheet.Cells[r + 2, colPosition + 1] = dt.Rows[r][i].ToString();

                                            }

                                            else

                                            {

                                                worksheet.Cells[r + TemplateRow, colPosition + 1] = dt.Rows[r][i].ToString();

                                            }

                                            colPosition++;

                                        }

                                        else

                                        {

 

                                        }

                                    }

                                    rowRead++;

                                    percent = ((float)(100 * rowRead)) / totalCount;

                                }

                                #endregion

                                #region 扩展项

                                if (exDataTableList != null && exDataTableList.Count > 0)

                                {

                                    foreach (System.Data.DataTable item in exDataTableList)

                                    {

                                        for (int k = 0; k < item.Rows.Count; r++, k++)

                                        {

                                            colPosition = 0;

                                            //生成扩展 DataTable 每行数据

                                            for (int t = 0; t < item.Columns.Count; t++)

                                            {

                                                exclStr = dt.Columns[t].ColumnName;

                                                if (excludeColumn.Contains(exclStr))

                                                {

                                                    if (TemplatePath == "")

                                                    {

                                                        worksheet.Cells[r + 2, colPosition + 1] = item.Rows[k][t].ToString();

                                                    }

                                                    else

                                                    {

                                                        worksheet.Cells[r + TemplateRow, colPosition + 1] = item.Rows[k][t].ToString();

                                                    }

                                                    colPosition++;

                                                }

                                                else

                                                {

 

                                                }

                                            }

                                            rowRead++;

                                            percent = ((float)(100 * rowRead)) / totalCount;

                                        }

                                    }

                                }

                                #endregion

                                #endregion

                            }; break;

                        case "2":

                            {

                                #region 2指定的为要排除的列

                                #region 常规项

                                int r = 0;

                                for (r = 0; r < dt.Rows.Count; r++)

                                {

                                    colPosition = 0;

                                    for (int i = 0; i < dt.Columns.Count; i++)

                                    {

                                        exclStr = dt.Columns[i].ColumnName;

                                        if (excludeColumn.Contains(exclStr))

                                        {

 

                                        }

                                        else

                                        {

                                            if (TemplatePath == "")

                                            {

                                                worksheet.Cells[r + 2, colPosition + 1] = dt.Rows[r][i].ToString();

                                            }

                                            else

                                            {

                                                worksheet.Cells[r + TemplateRow, colPosition + 1] = dt.Rows[r][i].ToString();

                                            }

                                            colPosition++;

                                        }

                                    }

                                    rowRead++;

                                    percent = ((float)(100 * rowRead)) / totalCount;

                                }

                                #endregion

                                #region 扩展项

                                if (exDataTableList != null && exDataTableList.Count > 0)

                                {

                                    foreach (System.Data.DataTable item in exDataTableList)

                                    {

                                        for (int k = 0; k < item.Rows.Count; r++, k++)

                                        {

                                            colPosition = 0;

                                            //生成扩展 DataTable 每行数据

                                            for (int t = 0; t < item.Columns.Count; t++)

                                            {

                                                exclStr = dt.Columns[t].ColumnName;

                                                if (excludeColumn.Contains(exclStr))

                                                {

 

                                                }

                                                else

                                                {

                                                    if (TemplatePath == "")

                                                    {

                                                        worksheet.Cells[r + 2, colPosition + 1] = item.Rows[k][t].ToString();

                                                    }

                                                    else

                                                    {

                                                        worksheet.Cells[r + TemplateRow, colPosition + 1] = item.Rows[k][t].ToString();

                                                    }

                                                    colPosition++;

                                                }

                                            }

                                            rowRead++;

                                            percent = ((float)(100 * rowRead)) / totalCount;

                                        }

                                    }

                                }

                                #endregion

                                #endregion

                            }; break;

                        default:

                            break;

                    }

 

                }

                else

                {

                    //生成每行数据

                    int r = 0;

                    for (r = 0; r < dt.Rows.Count; r++)

                    {

                        //生成每列数据

                        if (TemplatePath == "")

                        {

                            for (int i = 0; i < dt.Columns.Count; i++)

                            {

                                worksheet.Cells[r + 2, i + 1] = dt.Rows[r][i].ToString();

                            }

                        }

                        else

                        {

                            for (int i = 0; i < dt.Columns.Count; i++)

                            {

                                worksheet.Cells[r + 1 + TemplateRow, i + 1] = dt.Rows[r][i].ToString();

                            }

                        }

                        rowRead++;

                        percent = ((float)(100 * rowRead)) / totalCount;

                    }

                }

                #endregion

                switch (pathType)

                {

                    case "0": { workbook.Saved = false; }; break;

                    case "1": { workbook.Saved = true; workbook.SaveCopyAs(excelPathName); }; break;

                    default:

                        return false;

                }

                xlApp.Visible = false;//是否在服务器打开

                workbook.Close(true, Type.Missing, Type.Missing);

                workbook = null;

                xlApp.Quit();

                xlApp = null;

                return true;

            }

            catch (Exception)

            {

                return false;

            }

        }

 

        /// <summary>

        /// 从DataTable导出Excel,指定列别名

        /// </summary>

        /// <param name="dt">DataTable</param>

        /// <param name="excelPathName">含Excel名称的保存路径 在pathType=1时有效,其它请赋值空字符串</param>

        /// <param name="pathType">路径类型。只能取值:0客户自定义路径;1服务端定义路径,标识文件保存路径是服务端指定还是客户自定义路径及文件名</param>

        /// <param name="colName">各列的列名List string </param>

        /// <param name="sheetName">sheet1的名称 为空字符串时保持默认名称</param>

        /// <param name="TemplatePath">模版在项目服务器中路径 为空字符串时表示无模版</param>

        /// <param name="TemplateRow">模版中已存在数据的行数,无模版时请传入参数 0</param>

        /// <param name="exDataTableList">扩展 DataTable List 用于当上下两个及以上DataTable数据类型不一至,但又都在同一列时使用,要求格式与参数第一个 DataTable的列名字段名一至,仅字段类型可不同</param>

        /// <returns>bool</returns>

        public static bool ToExcelForDataTableC(System.Data.DataTable dt, string excelPathName, string pathType, List<string> colName, string sheetName, string TemplatePath, int TemplateRow, List<System.Data.DataTable> exDataTableList)

        {

            List<string> excludeColumn = new List<string>();

            string excludeType = "0";

            return ToExcelForDataTable(dt, excelPathName, pathType, colName, excludeColumn, excludeType, sheetName, TemplatePath, TemplateRow, exDataTableList);

        }

 

        /// <summary>

        /// 从DataTable导出Excel,指定要排除的列

        /// </summary>

        /// <param name="dt">DataTable</param>

        /// <param name="excelPathName">含Excel名称的保存路径 在pathType=1时有效,其它请赋值空字符串</param>

        /// <param name="pathType">路径类型。只能取值:0客户自定义路径;1服务端定义路径,标识文件保存路径是服务端指定还是客户自定义路径及文件名</param>

        /// <param name="excludeColumn">要显示/排除的列</param>

        /// <param name="excludeType">显示/排除列方式 0为所有列 1指定的为要显示的列 2指定的为要排除的列</param>

        /// <param name="sheetName">sheet1的名称 为空字符串时保持默认名称</param>

        /// <param name="TemplatePath">模版在项目服务器中路径 为空字符串时表示无模版</param>

        /// <param name="TemplateRow">模版中已存在数据的行数,无模版时请传入参数 0</param>

        /// <param name="exDataTableList">扩展 DataTable List 用于当上下两个及以上DataTable数据类型不一至,但又都在同一列时使用,要求格式与参数第一个 DataTable的列名字段名一至,仅字段类型可不同</param>

        /// <returns>bool</returns>

        public static bool ToExcelForDataTableE(System.Data.DataTable dt, string excelPathName, string pathType, List<string> excludeColumn, string excludeType, string sheetName, string TemplatePath, int TemplateRow, List<System.Data.DataTable> exDataTableList)

        {

            List<string> colName = new List<string>();

            return ToExcelForDataTable(dt, excelPathName, pathType, colName, excludeColumn, excludeType, sheetName, TemplatePath, TemplateRow, exDataTableList);

        }

        /// <summary>

        /// 从DataTable导出Excel,使用默认列名,不排除导出任何列

        /// </summary>

        /// <param name="dt">DataTable</param>

        /// <param name="excelPathName">含Excel名称的保存路径 在pathType=1时有效,其它请赋值空字符串</param>

        /// <param name="pathType">路径类型。只能取值:0客户自定义路径;1服务端定义路径,标识文件保存路径是服务端指定还是客户自定义路径及文件名</param>

        /// <param name="sheetName">sheet1的名称 为空字符串时保持默认名称</param>

        /// <param name="TemplatePath">模版在项目服务器中路径 为空字符串时表示无模版</param>

        /// <param name="TemplateRow">模版中已存在数据的行数,无模版时请传入参数 0</param>

        /// <param name="exDataTableList">扩展 DataTable List 用于当上下两个及以上DataTable数据类型不一至,但又都在同一列时使用,要求格式与参数第一个 DataTable的列名字段名一至,仅字段类型可不同</param>

        /// <returns>bool</returns>

        public static bool ToExcelForDataTableZ(System.Data.DataTable dt, string excelPathName, string pathType, string sheetName, string TemplatePath, int TemplateRow, List<System.Data.DataTable> exDataTableList)

        {

            List<string> colName = new List<string>();

            List<string> excludeColumn = new List<string>();

            string excludeType = "0";

            return ToExcelForDataTable(dt, excelPathName, pathType, colName, excludeColumn, excludeType, sheetName, TemplatePath, TemplateRow, exDataTableList);

        }

        #endregion

 

        #region ExportExcelForModelList

        /// <summary>

        /// 从DataTable导出Excel,指定列别名,指定要排除的列

        /// </summary>

        /// <param name="dt">DataTable</param>

        /// <param name="excelPathName">含Excel名称的保存路径 在pathType=1时有效,其它请赋值空字符串</param>

        /// <param name="pathType">路径类型。只能取值:0客户自定义路径;1服务端定义路径,标识文件保存路径是服务端指定还是客户自定义路径及文件名</param>

        /// <param name="colName">各列的列名List string </param>

        /// <<param name="excludeColumn">要显示/排除的列</param>

        /// <param name="excludeType">显示/排除列方式 0为所有列 1指定的为要显示的列 2指定的为要排除的列</param>

        /// <param name="sheetName">sheet1的名称 为空字符串时保持默认名称</param>

        /// <param name="TemplatePath">模版在项目服务器中路径 为空字符串时表示无模版</param>

        /// <param name="TemplateRow">模版中已存在数据的行数,无模版时请传入参数 0</param>

        /// <param name="exDataTableList">扩展 DataTable List 用于当上下两个及以上DataTable数据类型不一至,但又都在同一列时使用,要求格式与参数第一个 DataTable的列名字段名一至,仅字段类型可不同</param>

        /// <returns>bool</returns>

        public static bool ToExcelForModelList<T>(List<T> md, string excelPathName, string pathType, List<string> colName, List<string> excludeColumn, string excludeType, string sheetName, string TemplatePath, int TemplateRow, List<System.Data.DataTable> exDataTableList)

        {

            System.Data.DataTable dt = ModelListToDataTable(md);

            return ToExcelForDataTable(dt, excelPathName, pathType, colName, excludeColumn, excludeType, sheetName, TemplatePath, TemplateRow, exDataTableList);

        }

 

        /// <summary>

        /// 从DataTable导出Excel,指定列别名

        /// </summary>

        /// <param name="dt">DataTable</param>

        /// <param name="excelPathName">含Excel名称的保存路径 在pathType=1时有效,其它请赋值空字符串</param>

        /// <param name="pathType">路径类型。只能取值:0客户自定义路径;1服务端定义路径,标识文件保存路径是服务端指定还是客户自定义路径及文件名</param>

        /// <param name="colName">各列的列名List string </param>

        /// <param name="sheetName">sheet1的名称 为空字符串时保持默认名称</param>

        /// <param name="TemplatePath">模版在项目服务器中路径 为空字符串时表示无模版</param>

        /// <param name="TemplateRow">模版中已存在数据的行数,无模版时请传入参数 0</param>

        /// <param name="exDataTableList">扩展 DataTable List 用于当上下两个及以上DataTable数据类型不一至,但又都在同一列时使用,要求格式与参数第一个 DataTable的列名字段名一至,仅字段类型可不同</param>

        /// <returns>bool</returns>

        public static bool ToExcelForModelListC<T>(List<T> md, string excelPathName, string pathType, List<string> colName, string sheetName, string TemplatePath, int TemplateRow, List<System.Data.DataTable> exDataTableList)

        {

            List<string> excludeColumn = new List<string>();

            string excludeType = "0";

            return ToExcelForModelList(md, excelPathName, pathType, colName, excludeColumn, excludeType, sheetName, TemplatePath, TemplateRow, exDataTableList);

        }

 

        /// <summary>

        /// 从DataTable导出Excel,指定要排除的列

        /// </summary>

        /// <param name="dt">DataTable</param>

        /// <param name="excelPathName">含Excel名称的保存路径 在pathType=1时有效,其它请赋值空字符串</param>

        /// <param name="pathType">路径类型。只能取值:0客户自定义路径;1服务端定义路径,标识文件保存路径是服务端指定还是客户自定义路径及文件名</param>

        /// <param name="excludeColumn">要显示/排除的列</param>

        /// <param name="excludeType">显示/排除列方式 0为所有列 1指定的为要显示的列 2指定的为要排除的列</param>

        /// <param name="sheetName">sheet1的名称 为空字符串时保持默认名称</param>

        /// <param name="TemplatePath">模版在项目服务器中路径 为空字符串时表示无模版</param>

        /// <param name="TemplateRow">模版中已存在数据的行数,无模版时请传入参数 0</param>

        /// <param name="exDataTableList">扩展 DataTable List 用于当上下两个及以上DataTable数据类型不一至,但又都在同一列时使用,要求格式与参数第一个 DataTable的列名字段名一至,仅字段类型可不同</param>

        /// <returns>bool</returns>

        public static bool ToExcelForModelListE<T>(List<T> md, string excelPathName, string pathType, List<string> excludeColumn, string excludeType, string sheetName, string TemplatePath, int TemplateRow, List<System.Data.DataTable> exDataTableList)

        {

            List<string> colName = new List<string>();

            return ToExcelForModelList(md, excelPathName, pathType, colName, excludeColumn, excludeType, sheetName, TemplatePath, TemplateRow, exDataTableList);

        }

 

        /// <summary>

        /// 从DataTable导出Excel,使用默认列名,不排除导出任何列

        /// </summary>

        /// <param name="dt">DataTable</param>

        /// <param name="excelPathName">含Excel名称的保存路径 在pathType=1时有效,其它请赋值空字符串</param>

        /// <param name="pathType">路径类型。只能取值:0客户自定义路径;1服务端定义路径,标识文件保存路径是服务端指定还是客户自定义路径及文件名</param>

        /// <param name="sheetName">sheet1的名称 为空字符串时保持默认名称</param>

        /// <param name="TemplatePath">模版在项目服务器中路径 为空字符串时表示无模版</param>

        /// <param name="TemplateRow">模版中已存在数据的行数,无模版时请传入参数 0</param>

        /// <param name="exDataTableList">扩展 DataTable List 用于当上下两个及以上DataTable数据类型不一至,但又都在同一列时使用,要求格式与参数第一个 DataTable的列名字段名一至,仅字段类型可不同</param>

        /// <returns>bool</returns>

        public static bool ToExcelForModelListZ<T>(List<T> md, string excelPathName, string pathType, string sheetName, string TemplatePath, int TemplateRow, List<System.Data.DataTable> exDataTableList)

        {

            List<string> colName = new List<string>();

            List<string> excludeColumn = new List<string>();

            string excludeType = "0";

            return ToExcelForModelList(md, excelPathName, pathType, colName, excludeColumn, excludeType, sheetName, TemplatePath, TemplateRow, exDataTableList);

        }

        #endregion

 

        #region 从DataTable导出Excel; ToExcelModel实体传参

        /// <summary>

        /// 从DataTable导出Excel; ToExcelModel实体传参

        /// </summary>

        /// <param name="tem">ExcelHelper.ToExcelModel</param>

        /// <returns></returns>

        public static bool ToExcelForDataTable(ToExcelModel tem)

        {

            if (tem != null)

            {

                return ToExcelForDataTable(tem.DataTable, tem.excelPathName, tem.pathType, tem.colNameList, tem.excludeColumn, tem.excludeType, tem.sheetName, tem.TemplatePath, tem.TemplateRow, tem.exDataTableList);

            }

            else

            {

                return false;

            }

        }

        #endregion

 

        #region Model To DataTable

        /// <summary>

        /// 实体类转换成DataTable

        /// </summary>

        /// <param name="modelList">实体类列表</param>

        /// <returns></returns>

        public static System.Data.DataTable ModelListToDataTable<T>(List<T> modelList)

        {

            System.Data.DataTable dtReturn = new System.Data.DataTable();

 

            // column names

            PropertyInfo[] oProps = null;

 

            if (modelList == null) return dtReturn;

 

            foreach (T rec in modelList)

            {

                if (oProps == null)

                {

                    oProps = ((Type)rec.GetType()).GetProperties();

                    foreach (PropertyInfo pi in oProps)

                    {

                        Type colType = pi.PropertyType;

 

                        if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition()

                        == typeof(Nullable<>)))

                        {

                            colType = colType.GetGenericArguments()[0];

                        }

 

                        dtReturn.Columns.Add(new DataColumn(pi.Name, colType));

                    }

                }

 

                DataRow dr = dtReturn.NewRow();

 

                foreach (PropertyInfo pi in oProps)

                {

                    dr[pi.Name] = pi.GetValue(rec, null) == null ? DBNull.Value : pi.GetValue

                    (rec, null);

                }

 

                dtReturn.Rows.Add(dr);

            }

            return dtReturn;

        }

        #endregion

 

        #region 说明 如何使用

        /*

         * 功能:

         *      1、将System.Data.DataTable数据导出到Excel文件

         *      2、将Model(Entity)数据实体导出到Excel文件

         * 完整调用:

         *      1、ExcelHelper.ToExcelForDataTable(DataTable,excelPathName,pathType,colName,excludeColumn,excludeType,sheetName,TemplatePath,TemplateRow,exDataTableList);

         *      2、ExcelHelper.ToExcelForModelList(Model,excelPathName,pathType,colName,excludeColumn,excludeType,sheetName,TemplatePath,TemplateRow,exDataTableList);

         * 参数说明:

         *      1、DataTable:DataSet.DataTable[0];数据表

         *      2、Model:Model.Users users = new Model.Users(){...};数据实体

         *      3、excelPathName:含Excel名称的保存路径 在pathType=1时有效。用户自定义保存路径时请赋值空字符串 ""。格式:"E://456.xlsx"

         *      4、pathType:路径类型。只能取值:0用户自定义路径,弹出用户选择路径对话框;1服务端定义路径。标识文件保存路径是服务端指定还是客户自定义路径及文件名,与excelPathName参数合用

         *      5、colName:各列的列别名List string,比如:字段名为userName,此处可指定为"用户名",并以此显示

         *      6、excludeColumn:要显示/排除的列,指定这些列用于显示,或指定这些列用于不显示。倒低这些列是显示还是不显示,由excludeType参数决定

         *      7、excludeType:显示/排除列方式。 0为显示所有列 1指定的是要显示的列 2指定的是要排除的列,与excludeColumn合用

         *      8、sheetName:sheet1的名称,要使期保持默认名称请指定为空字符串 ""

         *      9、TemplatePath:模版在项目服务器中路径 例:tp.xlsx 。当为空字符串 "" 时表示无模版

         *      10、TemplateRow:模版中已存在数据的行数,与TemplatePath合用,无模版时请传入参数 0

         *      11、exDataTableList:扩展 DataTable List 用于当上下两个及以上DataTable数据类型不一至,但又都在同一列时使用,要求格式与参数第一个 DataTable的列名字段名一至,仅字段类型可不同

         * 注意:

         *      1、exDataTableList参数为一个List<System.Data.DataTable> 集合,当数据为 Model 时,可先调用 ExcelHelper.ModelListToDataTable(System.Data.DataTable dt)将Model转为System.Data.DataTable

         */

        #endregion

        #endregion

        #region 从Excel导入数据到 Ms Sql

        /// <summary>

        /// 从Excel导入数据到 Ms Sql

        /// </summary>

        /// <param name="excelFile">Excel文件路径(含文件名)</param>

        /// <param name="sheetName">sheet名</param>

        /// <param name="DbTableName">存储到数据库中的数据库表名称</param>

        /// <param name="columnType">对应表格的数据类型,如果为null,则为默认类型:double,nvarchar(500),datetime</param>

        /// <param name="connectionString">连接字符串</param>

        /// <returns></returns>

        public static bool FromExcel(string excelFile, string sheetName, string DbTableName, List<string> columnType, string connectionString)

        {

            DataSet ds = new DataSet();

            try

            {

                //获取全部数据  

                //string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + excelFile + ";" + "Extended Properties=Excel 8.0;";

                string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + excelFile + ";Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'"; //此连

                #region 知识扩展

                //HDR=Yes,代表第一行是标题,不做为数据使用。HDR=NO,则表示第一行不是标题,做为数据来使用。系统默认的是YES

                //IMEX=0 只读模式

                //IMEX=1 写入模式

                //IMEX=2 可读写模式

                #endregion

                #region 命名执行

                using (OleDbConnection conn = new OleDbConnection(strConn))

                {

                    conn.Open();

                    string strExcel = "";

                    OleDbDataAdapter myCommand = null;

                    strExcel = string.Format("select * from [{0}$]", sheetName);

                    myCommand = new OleDbDataAdapter(strExcel, strConn);

                    myCommand.Fill(ds, sheetName);

 

                    #region 数据库表是否存在的 T-SQL 检测语句准备

                    //如果目标表不存在则创建  

                    string strSql = string.Format("if object_id('{0}') is null create table {0}(", DbTableName != "" ? DbTableName : sheetName);

                    if (columnType != null && columnType.Count > 0)

                    {

                        #region 手动指定定每个字段的数据类型

                        //指定数据格式,要求一一对应

                        for (int i = 0; i < ds.Tables[0].Columns.Count; i++)

                        {

                            System.Data.DataColumn c = ds.Tables[0].Columns[i];

                            strSql += string.Format("[{0}] {1},", c.ColumnName, columnType[i]);

                        }

                        #endregion

                    }

                    else

                    {

                        #region 使用默认数据类型

                        foreach (System.Data.DataColumn c in ds.Tables[0].Columns)

                        {

                            //使用默认格式:只有double,DateTime,String三种类型

                            switch (c.DataType.ToString())

                            {

                                case "DateTime":

                                    {

                                        strSql += string.Format("[{0}] DateTime,", c.ColumnName);

                                    }; break;

                                case "Double":

                                    {

                                        strSql += string.Format("[{0}] double,", c.ColumnName);

                                    }; break;

                                default:

                                    strSql += string.Format("[{0}] nvarchar(500),", c.ColumnName);

                                    break;

                            }

                        }

                        #endregion

                    }

                    strSql = strSql.Trim(',') + ")";

                    #endregion

                    #region 执行 T-SQL 如果数据库表不存在则新建表,如果存在则不新建

                    using (System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection(connectionString))

                    {

                        sqlconn.Open();

                        System.Data.SqlClient.SqlCommand command = sqlconn.CreateCommand();

                        command.CommandText = strSql;

                        command.ExecuteNonQuery();

                        sqlconn.Close();

                    }

                    #endregion

                    #region 向数据库表插入数据

                    using (System.Data.SqlClient.SqlBulkCopy sbc = new System.Data.SqlClient.SqlBulkCopy(connectionString))

                    {

                        sbc.SqlRowsCopied += new System.Data.SqlClient.SqlRowsCopiedEventHandler(bcp_SqlRowsCopied);

                        sbc.BatchSize = 100;//每次传输的行数  

                        sbc.NotifyAfter = 100;//进度提示的行数  

                        sbc.DestinationTableName = DbTableName != "" ? DbTableName : sheetName;//数据库表名表名

                        sbc.WriteToServer(ds.Tables[0]);

                    }

                    #endregion

                }

                #endregion

            }

            catch (Exception ex)

            {

                return false;

            }

            return true;

        }

        #region 进度显示

        /// <summary>

        /// 进度显示

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        static void bcp_SqlRowsCopied(object sender, System.Data.SqlClient.SqlRowsCopiedEventArgs e)

        {

            e.RowsCopied.ToString();

        }

        #endregion

        #endregion

    }

    public class ToExcelModel

    {

        #region ToExcelModel自动属性

        /// <summary>

        /// 数据表

        /// </summary>

        public System.Data.DataTable DataTable { get; set; }

        /// <summary>

        /// 含Excel名称的保存路径 在pathType=1时有效。用户自定义保存路径时请赋值空字符串 ""。格式:"E://456.xlsx"

        /// </summary>

        public string excelPathName { get; set; }

        /// <summary>

        /// 路径类型。只能取值:0用户自定义路径,弹出用户选择路径对话框;1服务端定义路径。标识文件保存路径是服务端指定还是客户自定义路径及文件名,与excelPathName参数合用

        /// </summary>

        public string pathType { get; set; }

        /// <summary>

        /// 各列的列别名List string,比如:字段名为userName,此处可指定为"用户名",并以此显示

        /// </summary>

        public List<string> colNameList { get; set; }

        /// <summary>

        /// 要显示/排除的列,指定这些列用于显示,或指定这些列用于不显示。倒低这些列是显示还是不显示,由excludeType参数决定

        /// </summary>

        public List<string> excludeColumn { get; set; }

        /// <summary>

        /// 显示/排除列方式。 0为显示所有列 1指定的是要显示的列 2指定的是要排除的列,与excludeColumn合用

        /// </summary>

        public string excludeType { get; set; }

        /// <summary>

        /// sheet1的名称,要使期保持默认名称请指定为空字符串 ""

        /// </summary>

        public string sheetName { get; set; }

        /// <summary>

        /// 模版在项目服务器中路径 例:tp.xlsx 。当为空字符串 "" 时表示无模版

        /// </summary>

        public string TemplatePath { get; set; }

        /// <summary>

        /// 模版中已存在数据的行数,与TemplatePath合用,无模版时请传入参数 0

        /// </summary>

        public int TemplateRow { get; set; }

        /// <summary>

        /// 扩展 DataTable List 用于当上下两个及以上DataTable数据类型不一至,但又都在同一列时使用,要求格式与参数第一个 DataTable的列名字段名一至,仅字段类型可不同

        /// </summary>

        public List<System.Data.DataTable> exDataTableList { get; set; }

        #endregion

    }

    public class FromExcelModel

    {

        /// <summary>

        /// Excel文件路径(含文件名)

        /// </summary>

        public string excelFile { get; set; }

        /// <summary>

        /// sheet名<

        /// </summary>

        public string sheetName { get; set; }

        /// <summary>

        /// 存储到数据库中的数据库表名称

        /// </summary>

        public string DbTableName { get; set; }

        /// <summary>

        /// 对应表格的数据类型,如果为null,则为默认类型:double,nvarchar(500),datetime

        /// </summary>

        public List<string> columnTypeList { get; set; }

        /// <summary>

        /// 连接字符串 server=serverip;database=databasename;uid=username;pwd=password;

        /// </summary>

        public string connectionString { get; set; }

    }

}

推荐阅读