2012-10-25 6 views
6

私はExcelワークシート(.xls)を持っています。私はそれをSQLスクリプトに変換する必要があります。単一のExcelワークシートは複数のテーブルで構成されています。結果として得られるスクリプトには、複数のcreate table文とinsert文が必要です。 http://www.sqlconverter.com/のような様々なツールを試しましたが、適切な解決策を得ることができません。私はそれを行うことができる他の方法ですか?excelワークシートをSQLスクリプトに変換する

+1

私の知る限り、MS SQL ServerがデータベースにExcelシートをロードするために、いくつかの機能を提供しています。http:// support.microsoft.com/kb/321686 – muehlbau

+0

私はこのリンクを見たことがありますが、それはかなり複雑で、私はそれを得ることができません。私はそれのための簡単な解決策が必要です – user1402867

答えて

10

私は、インポートウィザードを使用すると、あなたが望むよりも複雑なソリューションを使用していたため、データを読み込もうとしているというご意見に気づきました。 、

まず、各シートにSAVE ASを行い、CSVファイルに変換:

あなたはBULK INSERTを試すことができます。インポートするシートごとに1つのCSVファイルが必要です。

次に、同様のデータ型と長さのテーブルを作成します。一般的なExcelセルはVARCHAR(255)です(特定の場合はNVARCHAR(255)このソリューションではユニコードは使用しないでください)。

お使いのExcelシートは、5列の持っていたのであれば、:

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

を次に、あなたがネットワーク共有またはどこSQLサーバー/マシンにローカル上のファイルを持っている表に簡単な一括挿入を書くことができますインスタンスはです。たとえば、マシン上にファイルがあり、ネットワーク上のサーバにプッシュしようとした場合、SQLは以下のスクリプトのC:\があなたのマシンではなくサーバ上にあると考えます。あなたは、フォルダを共有し、ネットワーク経由でアクセスする必要があります:\\MyMachineName\SharedFolder\Sheet1.csv

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

これは、そのテーブルにデータを取得する必要があり、同じ数の列がファイルやテーブルに存在しました。

これはきれいではありませんが、簡単です。 BULK INSERTは、基本的で素早い読み込み方法を試してみました。

0

もエクセルからグループインサートへの単純な方法がある:データはsepearate列の列B、C及びDである場合、単純に作成する式: =「& B1 &「、「『値(挿入します」』 "& C1 &" '' "& D1 &" ')テーブル定義との完全なSQL挿入スクリプトにXLSX、CSVまたはJSONからテーブルを変換するなど、これを、行いsqlizer.io

3

オンラインツール。

+0

SQLizer.ioは5,000行未満の変換データ –

+0

http://www.convertcsv.com/csv-to-sql.htm –

0

これはvamsi krishna mysoreによって作成されました 1.apacheのApoIを使用する必要があり、それがこのプロジェクトに私はsusedファイルとシステム 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 
関連する問題