将Excel工作表转换为SQL脚本

我有一个Excel工作表(.xls)。 我需要将其转换为SQL脚本。 单个Excel工作表由多个表组成。 所以生成的脚本应该有多个创build表和插入语句。 我试过各种工具,如http://www.sqlconverter.com/,但我无法得到一个适当的解决scheme。 任何其他方式我可以做到这一点?

我注意到你的评论,使用导入向导比解决scheme更复杂,所以你必须要加载数据。

你可以试试BULK INSERT

首先,在每张纸上做一个SAVE AS并将其转换为CSV文件。 您应该为每个要导入的工作表提供一个CSV文件。

接下来,创build一个表格,其中包含相似的数据types和长度。一个典型的Excel单元格是一个VARCHAR(255),(如果要特定的话,可能更像NVARCHAR(255)避免unicode这个解决scheme)。

所以,如果你的Excel表有5列:

 CREATE TABLE Sheet1 (Column1 VARCHAR(255) , Column2 VARCHAR(255) , Column3 VARCHAR(255) , Column4 VARCHAR(255) , Column5 VARCHAR(255) ) 

然后,你可以写一个简单的批量插入表提供你有networking共享上的文件或本地到SQL实例的服务器/机器。 例如,如果你的机器上有这个文件,并想尝试将其推送到networking上的服务器上,SQL会认为下面脚本中的C:\是在服务器上,而不是在你的机器上。 您将不得不共享一个文件夹并通过networking访问它: \\MyMachineName\SharedFolder\Sheet1.csv

 BULK INSERT dbo.Sheet1 FROM 'C:\LocalFolder\WhereTheFileIs\Sheet1.csv' WITH ( FIELDTERMINATOR = ',' , ROWTERMINATOR = '\n' ) 

如果文件和表中存在相同数量的列,则应该将数据存入该表。

这不是很漂亮,但很简单。 BULK INSERT是一种经过validation的基本和快速加载的方法。

在线工具sqlizer.io执行此操作,包括将表格从XLSX,CSV或JSON转换为带有表定义的SQL插入脚本。

还有一个简单的方法来从Excell中插入:简单地说,如果你的数据在分隔列的B,C和D列中创build公式:=“insert into values(''&B1&”','“&C1&”' ' “D1&”')

这是由vamsi克里希纳迈索尔创build1.apache apoi应该使用它应该被添加到文件和系统apache apoi我在这个项目中使用

  package excelread; import java.io.File; import java.io.FileOutputStream; import java.util.LinkedList; import java.util.List; import java.util.Scanner; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import org.apache.poi.xwpf.usermodel.ParagraphAlignment; import org.apache.poi.xwpf.usermodel.UnderlinePatterns; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; public class ExcelRead { public static void main(String[] args) throws Exception { try { FileOutputStream output=new FileOutputStream("result.docx"); FileOutputStream output=new FileOutputStream("result.sql");//sql script in the script FileOutputStream output=new FileOutputStream("result.xlxs"); FileOutputStream output=new FileOutputStream("result.csv"); XWPFDocument doc=new XWPFDocument(); XWPFParagraph para=doc.createParagraph(); para.setAlignment(ParagraphAlignment.CENTER); XWPFRun pararun=para.createRun(); pararun.setBold(true); pararun.setFontSize(20); pararun.setText("Database Tables\n\n"); File f= new File("C:\\Users\\admin\\Desktop\\BUILDING_TB.xls");//file location where it is stored in the system Workbook wb= Workbook.getWorkbook(f); int sheets=wb.getNumberOfSheets(); for(int s1=0;s1<sheets;s1++) { System.out.println("for sheet"+s1); Sheet s= wb.getSheet(s1); String tbname=s.getName(); XWPFParagraph para1=doc.createParagraph(); para1.setAlignment(ParagraphAlignment.LEFT); pararun=para1.createRun(); pararun.setText(tbname); pararun.setFontSize(16); pararun.setUnderline(UnderlinePatterns.WORDS); int rows=s.getRows(); int cols=s.getColumns(); int indexrows=0; int cols1=0; int indexcols=0; int pk=1000,dt=1000,cn=1000,ci=1000,dd=1000,n=1000,com=1000; int ava=0; List <String> comments= new LinkedList <String>(); List <String> sequence= new LinkedList <String>(); List <String> cid= new LinkedList <String>(); String createQuery="create table " +tbname+"("; System.out.println(rows+" "+cols); for(int j=0;j<rows;j++) //TO AVOID EMPTY ROW AND COLUMNS { sequence.clear(); for(int i=0;i<cols;i++) //TO GET ONE ROW DETAILS { indexcols=0; cols1=0; Cell c=s.getCell(i,j); sequence.add(c.getContents()); } for(int i=0;i<cols;i++) { if(sequence.get(i)=="") { cols1= ++indexcols; } else { ava=1; indexrows=j; break; } } if(ava==1) break; } for(;indexcols<cols;indexcols++) //TO ARRANG DATA IN REQUIRED ORDER { if(sequence.get(indexcols).toLowerCase().contains("PK".toLowerCase())) { pk=indexcols; } else if(sequence.get(indexcols).toLowerCase().contains("Column_id".toLowerCase())) { ci=indexcols; } else if(sequence.get(indexcols).toLowerCase().contains("Column_Name".toLowerCase())) { cn=indexcols; } else if(sequence.get(indexcols).toLowerCase().contains("nullable".toLowerCase())) { n=indexcols; } else if(sequence.get(indexcols).toLowerCase().contains("Data_TYpe".toLowerCase())) { dt=indexcols; } else if(sequence.get(indexcols).toLowerCase().contains("Default".toLowerCase())) { dd=indexcols; } else if(sequence.get(indexcols).toLowerCase().contains("comments".toLowerCase())) { com=indexcols; } } indexrows++; int rows1=indexrows; for(;indexrows<rows;indexrows++) //PREPARING QUERY(For excel rows which contain data) { indexcols=cols1; for(;indexcols<cols;indexcols++) //for all columns { Cell c=s.getCell(indexcols, indexrows); String item=c.getContents(); //adding Column name to query if(indexcols==cn) { if(!(item.equals("")) && indexrows!=rows1) createQuery =createQuery+" ,"+item; else if(item.equals("")) break; else createQuery =createQuery+" "+item; } //adding data type to query if(indexcols==dt) { createQuery =createQuery+" "+item; } //adding data default to query else if(indexcols==dd) { if(item=="") continue; else createQuery =createQuery+" "+"default "+item; } //addig primary key constaint to query else if(indexcols==pk) { if(item.equalsIgnoreCase("true")) createQuery =createQuery+" "+"primary key"; else createQuery =createQuery+" "+""; } //adding not null constraint to query else if(indexcols==n) { if(item.equalsIgnoreCase("no")) createQuery =createQuery+" "+"not null"; else createQuery =createQuery+" "+""; } //adding comments else if(indexcols==com) { if(item!="") { comments.add(item); } else { comments.add("comments empty"); } } else if(indexcols==ci) { if(item!=null) { cid.add(item); } } }//column loop close }//row looop close createQuery=createQuery+")"; System.out.println(createQuery); XWPFParagraph para2=doc.createParagraph(); para2.setAlignment(ParagraphAlignment.LEFT); pararun=para2.createRun(); pararun.setFontSize(14); pararun.setText(createQuery+";"); System.out.println("table created successfully"); }//sheets loop closse doc.write(output); //writing data into ouptu file output.close(); }//try block close catch(Exception e) { System.out.println(e.toString()); } }//main close }//class close