2012-10-25 21 views
6

Mam arkusza Excel (.xls). Muszę przekonwertować go do skryptu sql. Arkusz roboczy Single Excel składa się z wielu tabel. Dlatego wynikowy skrypt powinien mieć wiele instrukcji tworzenia tabel i wstawiania. Próbowałem różnych narzędzi, takich jak http://www.sqlconverter.com/, ale nie jestem w stanie uzyskać odpowiedniego rozwiązania. W inny sposób mogę to zrobić?przekonwertować arkusz programu Excel do skryptu sql

+1

AFAIK MS SQL Server zawiera kilka funkcji, aby załadować arkusze programu Excel do bazy danych: http: // support.microsoft.com/kb/321686 – muehlbau

+0

widziałem ten link wcześniej, ale jest dość skomplikowany i nie jestem w stanie przejść przez to .. muszę proste rozwiązanie dla niego – user1402867

Odpowiedz

10

zauważyłem komentarz, że za pomocą kreatora importu była bardziej skomplikowana roztworu niż chciałeś, więc trzeba próbować załadować danych.

Można spróbować BULK INSERT:

Najpierw zrobić Zapisz jako na każdym arkuszu i konwertować je do plików CSV. Powinieneś mieć jeden plik CSV dla każdego arkusza, który chcesz zaimportować.

Następnie stwórz tabelę z podobnymi typami danych i długością, które będziesz wprowadzać. Typowa komórka Excela to VARCHAR (255), (prawdopodobnie bardziej jak NVARCHAR (255), jeśli chcesz być konkretna, ale unikniemy unicode dla tego rozwiązania).

Dlatego, jeśli arkusz excel miał 5 kolumn:

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

Następnie można napisać prosty luzem insert do tabeli o ile masz plik w udziale sieciowym lub lokalnej na serwerze/komputerze, na którym SQL instancja jest. Na przykład, gdybyś miał plik na swoim komputerze i chciał wypróbować wypychanie do serwera w sieci, SQL pomyślałby, że C:\ w poniższym skrypcie był na serwerze, a nie na twoim komputerze. Trzeba by udostępnić folder i do niego dostęp za pośrednictwem sieci: \\MyMachineName\SharedFolder\Sheet1.csv

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

ta powinna uzyskać dane w tej tabeli pod warunkiem, że taką samą liczbę kolumn istnieje w pliku i stołem.

To nie jest ładna, ale jest to proste. BULK INSERT to wypróbowana i prawdziwa metoda podstawowego i szybkiego ładowania.

0

Jest również prosty sposób na wkładce grupowego z Excell: wystarczy, jeśli dane w kolumnie B, C i D w sepearate kolumnie tworzenia wzoru: = „dodaje się do wartości ("”& B1 &„«» "& C1 &" '' "& D1 &" ')

3

narzędzia online sqlizer.io robi to, w tym konwersji tabel z XLSX, CSV lub JSON do INSERT skryptów kompletnych z definicji tabeli.

+0

SQLizer.io jest bezpłatny dla konwersji mniejszej niż 5000 wierszy dane –

+0

Również http://www.convertcsv.com/csv-to-sql.htm –

0

to stworzony przez vamsi krishna mysore 1.apache Apoi należy stosować należy dodać do plików i systemu apache Apoi i sused w tym projekcie

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 
Powiązane problemy