2012-10-25 22 views
6

Bir excel çalışma sayfası (.xls) var. Onu sql betiğine dönüştürmem gerekiyor. Tek excel çalışma sayfası çoklu tablolardan oluşur. Sonuçta ortaya çıkan betik birden çok tablo oluşturmalı ve ifadeler içermelidir. http://www.sqlconverter.com/ gibi çeşitli araçları denedim, ancak uygun bir çözüm bulamıyorum. Yapabileceğim başka bir yol var mı?excel çalışma sayfasını sql komut dosyasına dönüştürebilirsiniz

+1

AFAIK MS SQL Server veritabanı excel sayfaları yüklemek için bazı işlevler sağlıyorsa bu projede sused dosya ve sistem apache Apoi eklenmelidir kullanılmalıdır: http: // support.microsoft.com/kb/321686 – muehlbau

+0

Bu bağlantıyı daha önce görmüştüm ama oldukça karmaşık ve bunun üstesinden gelemiyorum .. Bunun için basit bir çözüme ihtiyacım var – user1402867

cevap

10

İçe aktarma sihirbazını kullanmak istediğinizden çok daha karmaşık bir çözüm bulduğuna dair yorumunuzu farkettim, bu nedenle veri yüklemeye çalışıyor olmalısınız. ,

İlk her yaprağa Kaydet yapın ve CSV dosyalarını dönüştürebilirsiniz:

Sen BULK INSERT deneyebilirsiniz. Almak istediğiniz her sayfa için bir CSV dosyanız olmalıdır.

Daha sonra, benzer veri türlerine ve getireceğiniz boyuta sahip bir tablo oluşturun. Tipik bir Excel hücresi, bir VARCHAR (255), (daha spesifik olmak isterseniz, NVARCHAR (255) gibi), ama bu çözüm için unicode'dan kaçınacağız). excel levha 5 sütun olsaydı

Yani,:

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

Sonra masanın ağ paylaşımına veya yerel sunucuya/makinede SQL üzerinde dosya var SAĞLANAN için basit toplu insert yazabilir örnek. Örneğin, makinenizde dosya varsa ve ağda bir sunucuya zorlamak istediğinizde, SQL aşağıdaki komut dosyasındaki C:\ sunucunun makinenizde olmadığını düşünür. Bir klasörü paylaşmak zorunda ve ağ üzerinden erişmek olacaktır: \\MyMachineName\SharedFolder\Sheet1.csv

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

Bu, o tabloya veri dosyası ve tabloda mevcut aynı sayıda sütun sağlanan almalısınız.

Güzel değil, ama basit. BULK INSERT, denenmiş ve gerçek bir temel ve hızlı yükleme yöntemidir.

0

da Excell grup yerleştirmek için basit bir yöntem yoktur: Veri sepearate sütunda sütun B, C ve D ise sadece oluşturmak formülü: = '& B1 & ", ' "değerler (eklemek"' "& C1 &" '' "& D1 & '")

3

tablo tanımlarıyla tam SQL uç komut içine XLSX'e, CSV veya JSON'dan masaları dönüştürme de dahil olmak üzere, bu, yapar sqlizer.io çevrimiçi araçtır.

+0

SQLizer.io, 5.000'den az satırın dönüşümleri için ücretsizdir veri –

+0

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

0

bu vamsi krishna mysoretarafından oluşturuldu1.apache Apoi bu i

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 
İlgili konular