怎么把excel表中的数据导入SQL数据库的表中

怎么把excel表中的数据导入SQL数据库的表中,第1张

我用的是

SQL代码执行添加的方法

插入前执行这段代码:

EXEC

SP_CONFIGURE

'SHOW

ADVANCED

OPTIONS',1

RECONFIGURE

EXEC

SP_CONFIGURE

'Ad

Hoc

Distributed

Queries',1

RECONFIGURE

插入的代码:

USE

[ABC]

INSERT

INTO

dboResources(ResourcesUrl,ResourcesLink,ResourcesText)

SELECT

FROM

OPENROWSET('MicrosoftJetOLEDB40',

'Excel

80;HDR=YES;Database=F:\Book1xls',

[sheet1$])

注意:dbo后面的是数据库的表名,括号内的是列名,ID列名,Datebase指向的是EXCEL文件名。

插入结束执行下面这段代码:

EXEC

SP_CONFIGURE

'Ad

Hoc

Distributed

Queries',0

RECONFIGURE

EXEC

SP_CONFIGURE

'SHOW

ADVANCED

OPTIONS',0

RECONFIGURE

运行下就能加到数据库

下面是使用Java实现的,将Excel数据表中的数据导入到数据库里里面。

public class ReadExcel {

   /

    对外提供读取excel 的方法

    /

   public static List<List<Object>> readExcel(File file) throws IOException {

       String fileName = filegetName();

       String extension = fileNamelastIndexOf("") == -1 "" : fileName

               substring(fileNamelastIndexOf("") + 1);

       if ("xls"equals(extension)) {

           return read2003Excel(file);

       } else if ("xlsx"equals(extension)) {

           return read2007Excel(file);

       } else {

           throw new IOException("不支持的文件类型");

       }

   }

   /

    读取 office 2003 excel

   

    @throws IOException

    @throws FileNotFoundException

    /

   private static List<List<Object>> read2003Excel(File file)

           throws IOException {

       List<List<Object>> list = new LinkedList<List<Object>>();

       HSSFWorkbook hwb = new HSSFWorkbook(new FileInputStream(file));

       HSSFSheet sheet = hwbgetSheetAt(0);

       Object value = null;

       HSSFRow row = null;

       HSSFCell cell = null;

       int counter = 0;

       for (int i = sheetgetFirstRowNum(); counter < sheet

               getPhysicalNumberOfRows(); i++) {

           row = sheetgetRow(i);

           if (row == null) {

               continue;

           } else {

               counter++;

           }

           List<Object> linked = new LinkedList<Object>();

           for (int j = rowgetFirstCellNum(); j <= rowgetLastCellNum(); j++) {

               cell = rowgetCell(j);

               if (cell == null) {

                   continue;

               }

               DecimalFormat df = new DecimalFormat("0");// 格式化 number String

                                                           // 字符

               SimpleDateFormat sdf = new SimpleDateFormat(

                       "yyyy-MM-dd HH:mm:ss");// 格式化日期字符串

               DecimalFormat nf = new DecimalFormat("000");// 格式化数字

               switch (cellgetCellType()) {

               case XSSFCellCELL_TYPE_STRING:

               //  Systemoutprintln(i + "行" + j + " 列 is String type");

                   value = cellgetStringCellValue();

                   break;

               case XSSFCellCELL_TYPE_NUMERIC:

                   /Systemoutprintln(i + "行" + j

                           + " 列 is Number type ; DateFormt:"

                           + cellgetCellStyle()getDataFormatString());/

                   if ("@"equals(cellgetCellStyle()getDataFormatString())) {

                       value = dfformat(cellgetNumericCellValue());

                   } else if ("General"equals(cellgetCellStyle()

                           getDataFormatString())) {

                       value = nfformat(cellgetNumericCellValue());

                   } else {

                       value = sdfformat(HSSFDateUtilgetJavaDate(cell

                               getNumericCellValue()));

                   }

                   break;

               case XSSFCellCELL_TYPE_BOOLEAN:

               //  Systemoutprintln(i + "行" + j + " 列 is Boolean type");

                   value = cellgetBooleanCellValue();

                   break;

               case XSSFCellCELL_TYPE_BLANK:

               //  Systemoutprintln(i + "行" + j + " 列 is Blank type");

                   value = "";

                   break;

               default:

               //  Systemoutprintln(i + "行" + j + " 列 is default type");

                   value = celltoString();

               }

               if (value == null || ""equals(value)) {

                   continue;

               }

               linkedadd(value);

           }

           listadd(linked);

       }

       return list;

   }

   /

    读取Office 2007 excel

    /

   private static List<List<Object>> read2007Excel(File file)

           throws IOException {

       List<List<Object>> list = new LinkedList<List<Object>>();

       // 构造 XSSFWorkbook 对象,strPath 传入文件路径

       XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(file));

       // 读取第一章表格内容

       XSSFSheet sheet = xwbgetSheetAt(0);

       Object value = null;

       XSSFRow row = null;

       XSSFCell cell = null;

       int counter = 0;

       for (int i = sheetgetFirstRowNum(); counter < sheet

               getPhysicalNumberOfRows(); i++) {

           row = sheetgetRow(i);

           if (row == null) {

               continue;

           } else {

               counter++;

           }

           List<Object> linked = new LinkedList<Object>();

           for (int j = rowgetFirstCellNum(); j <= rowgetLastCellNum(); j++) {

               cell = rowgetCell(j);

               if (cell == null) {

                   continue;

               }

               DecimalFormat df = new DecimalFormat("0");// 格式化 number String

                                                           // 字符

               SimpleDateFormat sdf = new SimpleDateFormat(

                       "yyyy-MM-dd HH:mm:ss");// 格式化日期字符串

               DecimalFormat nf = new DecimalFormat("000");// 格式化数字

               switch (cellgetCellType()) {

               case XSSFCellCELL_TYPE_STRING:

                   Systemoutprintln(i + "行" + j + " 列 is String type");

                   value = cellgetStringCellValue();

                   break;

               case XSSFCellCELL_TYPE_NUMERIC:

               /  Systemoutprintln(i + "行" + j

                           + " 列 is Number type ; DateFormt:"

                           + cellgetCellStyle()getDataFormatString());/

                   if ("@"equals(cellgetCellStyle()getDataFormatString())) {

                       value = dfformat(cellgetNumericCellValue());

                   } else if ("General"equals(cellgetCellStyle()

                           getDataFormatString())) {

                       value = nfformat(cellgetNumericCellValue());

                   } else {

                       value = sdfformat(HSSFDateUtilgetJavaDate(cell

                               getNumericCellValue()));

                   }

                   break;

               case XSSFCellCELL_TYPE_BOOLEAN:

           //      Systemoutprintln(i + "行" + j + " 列 is Boolean type");

                   value = cellgetBooleanCellValue();

                   break;

               case XSSFCellCELL_TYPE_BLANK:

               //  Systemoutprintln(i + "行" + j + " 列 is Blank type");

                   value = "";

                   break;

               default:

               //  Systemoutprintln(i + "行" + j + " 列 is default type");

                   value = celltoString();

               }

               if (value == null || ""equals(value)) {

                   continue;

               }

               linkedadd(value);

           }

           listadd(linked);

       }

       return list;

   }

   public static void main(String[] args) {

       try {

           readExcel(new File("D:\\Java\\apache-tomcat-8026\\webapps\\poi\\docs\\testReadxls"));

           // readExcel(new File("D:\\testxls"));

           /

               String docsPath = requestgetSession(true)getServletContext()

                       getRealPath("docs");

               String fileName = "testReadxls";

               String filePath = docsPath;

               if (EPlatformWindowsequals(OSinfogetOSname())) {

                   filePath = filePath + "\\" + fileName;

               } else {

                   filePath = filePath + "/" + fileName;

               }

               filePath = "E:\\testReadxls";

               List<List<Object>> list = readExcel(new File(filePath));

               requestsetAttribute("list", list);

               RequestDispatcher dispatcher = request

                       getRequestDispatcher("/readjsp");

               dispatcherforward(request, response);

            /

       } catch (IOException e) {

           eprintStackTrace();

       }

   }

}

打开EXCEL,新建一个空白工作表,点击数据菜单页面中的自其他来源,在下拉菜单中选项来自SQL Server选项。

在d出的数据连接向导中输入SQL Server服务器的名称或IP地址,并在登录凭证中输入正确的用户名和密码。并点击下一步按钮。

在选择数据库和表页面中选择要连接的数据,下方选择要显示的数据表名称,再点击下一步按钮。本例中我们选择CC数据库的SFC工作表。

在保持数据连接文件并完成这个步骤中,EXCEL会将连接信息保存在一个扩展名为ODC的文件中,并将其默认保存在电脑中我的文档下的我的数据源文件中。

最后一步就是将导入数据以什么方式显示以及保存在什么位置,本例中选择以表的方式保存在现有工作表并以A1单元格作为起始位置。点击确定完成连接导入。

稍等片刻后我们要连接的SFCr数据表就显示在我们指定的位置上了,整个过程完成。

1本文实现在c#中可高效的将excel数据导入到sqlserver数据库中,很多人通过循环来拼接sql,这样做不但容易出错而且效率低下,最好的办法是使用bcp,也就是SystemDataSqlClientSqlBulkCopy 类来实现。不但速度快,而且代码简单,下面测试代码导入一个6万多条数据的sheet,包括读取(全部读取比较慢)在我的开发环境中只需要10秒左右,而真正的导入过程只需要45秒。\x0d\2代码如下:\x0d\using System; \x0d\using SystemData; \x0d\using SystemWindowsForms; \x0d\using SystemDataOleDb; \x0d\namespace WindowsApplication2 \x0d\{ \x0d\ public partial class Form1 : Form \x0d\ { \x0d\ public Form1() \x0d\ { \x0d\ InitializeComponent(); \x0d\ } \x0d\\x0d\ private void button1_Click(object sender, EventArgs e) \x0d\ { \x0d\ //测试,将excel中的sheet1导入到sqlserver中 \x0d\ string connString = "server=localhost;uid=sa;pwd=sqlgis;database=master"; \x0d\ SystemWindowsFormsOpenFileDialog fd = new OpenFileDialog(); \x0d\ if (fdShowDialog() == DialogResultOK) \x0d\ { \x0d\ TransferData(fdFileName, "sheet1", connString); \x0d\ } \x0d\ } \x0d\\x0d\ public void TransferData(string excelFile, string sheetName, string connectionString) \x0d\ { \x0d\ DataSet ds = new DataSet(); \x0d\ try\x0d\ { \x0d\ //获取全部数据 \x0d\ string strConn = "Provider=MicrosoftJetOLEDB40;" + "Data Source=" + excelFile + ";" + "Extended Properties=Excel 80;"; \x0d\ OleDbConnection conn = new OleDbConnection(strConn); \x0d\ connOpen(); \x0d\ string strExcel = ""; \x0d\ OleDbDataAdapter myCommand = null; \x0d\ strExcel = stringFormat("select from [{0}$]", sheetName); \x0d\ myCommand = new OleDbDataAdapter(strExcel, strConn); \x0d\ myCommandFill(ds, sheetName); \x0d\\x0d\ //如果目标表不存在则创建 \x0d\ string strSql = stringFormat("if object_id('{0}') is null create table {0}(", sheetName); \x0d\ foreach (SystemDataDataColumn c in dsTables[0]Columns) \x0d\ { \x0d\ strSql += stringFormat("[{0}] varchar(255),", cColumnName); \x0d\ } \x0d\ strSql = strSqlTrim(',') + ")"; \x0d\\x0d\ using (SystemDataSqlClientSqlConnection sqlconn = new SystemDataSqlClientSqlConnection(connectionString)) \x0d\ { \x0d\ sqlconnOpen(); \x0d\ SystemDataSqlClientSqlCommand command = sqlconnCreateCommand(); \x0d\ commandCommandText = strSql; \x0d\ commandExecuteNonQuery(); \x0d\ sqlconnClose(); \x0d\ } \x0d\ //用bcp导入数据 \x0d\ using (SystemDataSqlClientSqlBulkCopy bcp = new SystemDataSqlClientSqlBulkCopy(connectionString)) \x0d\ { \x0d\ bcpSqlRowsCopied += new SystemDataSqlClientSqlRowsCopiedEventHandler(bcp_SqlRowsCopied); \x0d\ bcpBatchSize = 100;//每次传输的行数 \x0d\ bcpNotifyAfter = 100;//进度提示的行数 \x0d\ bcpDestinationTableName = sheetName;//目标表 \x0d\ bcpWriteToServer(dsTables[0]); \x0d\ } \x0d\ } \x0d\ catch (Exception ex) \x0d\ { \x0d\ SystemWindowsFormsMessageBoxShow(exMessage); \x0d\ }\x0d\ } \x0d\\x0d\ //进度显示 \x0d\ void bcp_SqlRowsCopied(object sender, SystemDataSqlClientSqlRowsCopiedEventArgs e) \x0d\ { \x0d\ thisText = eRowsCopiedToString(); \x0d\ thisUpdate(); \x0d\ }\x0d\ } \x0d\} \x0d\3上面的TransferData基本可以直接使用,如果要考虑周全的话,可以用oledb来获取excel的表结构,并且加入ColumnMappings来设置对照字段,这样效果就完全可以做到和sqlserver的dts相同的效果了。

方法/步骤

1

打开SQL Server Management Studio,按图中的路径进入导入数据界面。

2

导入的时候需要将EXCEL的文件准备好,不能打开。点击下一步。

数据源:选择“Microsoft Excel”除了EXCEL类型的数据,SQL还支持很多其它数据源类型。

选择需要导入的EXCEL文件。点击浏览,找到导入的文件确定。

再次确认文件路径没有问题,点击下一步。

默认为是使用的WINODWS身份验证,改为使用SQL身份验证。输入数据库密码,注意:数据库,这里看看是不是导入的数据库。也可以在这里临时改变,选择其它数据库。

选择导入数据EXCEL表内容范围,若有几个SHEET表,或一个SHEET表中有些数据我们不想导入,则可以编写查询指定的数据进行导入。点击下一步。

选择我们需要导入的SHEET表,比如我在这里将SHEET表名改为price,则导入后生面的SQL数据库表为price$。点击进入下一步。

点击进入下一步。

在这里完整显示了我们的导入的信息,执行内容,再次确认无误后,点击完成,开始执行。

可以看到任务执行的过程和进度。

执行成功:我们可以看看执行结果,已传输1754行,表示从EXCEL表中导入1754条数据,包括列名标题。这样就完成了,执行SQL查询语句:SELECT FROM price$就可以查看已导入的数据内容。

选中数据库,点鼠标右键,任务--导入数据,在数据源里选择microsoft

excel,在路径中选择哪个excel工作表,点下一步,如果你是选中数据库导入的,就不用选择,继续点下一步,选择复制一个或多个表或视图的数据,点下一步,选择你要导入的

工作薄

,狂点下一步,直到完成,OK

可以使用将Excel整理成CSV格式,通过SQL SERVER 2005自带的SSIS或者SQL SERVER2000的DTS导入到数据库中,其字段名可以根据Excel的列名(或者自定义选择第几行做为字段名),关于详细的 *** 作截图,可以查看SQL SERVER 2005自带的帮助即可,上面有简单的例子

把EXCEL数据导入到SQL数据库中:

1、在数据库上点击右键,然后选择“任务”,选择“导入数据”,就看到d出淡入数据的对话框

2、Excel 上面的字段命名最好跟要导入到最终的那个表的字段相同。假设终表为A表。组装好 如下图:

3、按照 *** 作步骤走下去,最终会生成一个新的表(临时表B表)。

可以借助工具,MSSQL表数据导出成Insert语句的工具 即:将查询出来的这些数据都生成insert into语句。

最终在A表中执行该insert into语句就可以将excel中的数据最终放入数据库中。

以上就是关于怎么把excel表中的数据导入SQL数据库的表中全部的内容,包括:怎么把excel表中的数据导入SQL数据库的表中、怎样把Excel表格导入到SQL数据库中、excel怎么连接sql数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10166998.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存