#!/usr/bin/env python
import urllib,json,string,sys,math,random,sys
import xlsxwriter
class excel:
    def __init__(self):
        self.char="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        #self.char="ABC"
        
    def gentoken(self,stringLength=10):
        return ''.join(random.choice(self.char) for i in range(stringLength))
    
    def buatkolom(self,panjang):
        jumlahchar=len(self.char)
        kolom=[];
        arrblokdata=[];
        realblokdata=[];
        jumlahkolom=1;
        
        jumlahdata=0;
        while (jumlahdata<panjang) :
            blokdata=pow(jumlahchar,jumlahkolom)
            jumlahdata=(jumlahdata+blokdata)
            arrblokdata.append(blokdata)
            realblokdata.append(blokdata)
            jumlahkolom=jumlahkolom+1
        
        if len(arrblokdata)>0:
            selisihakhir=jumlahdata-panjang
            arrblokdata[len(arrblokdata)-1]=arrblokdata[len(arrblokdata)-1]-selisihakhir
        
        #print arrblokdata
        jumlahblok=len(arrblokdata);
        jumlahkotak=[];
        
        for i in range(jumlahblok):
            kotakblok=i
            jumlahkotak.append(kotakblok+1)
            jumlahrotate=math.ceil(float(realblokdata[i])/float(jumlahchar))
            
            datakotak=[];
            for n in range(jumlahkotak[i]):
                
                rotasi=0;
                posisichar=0;
                
                for x in range(int(arrblokdata[i])):
                    if posisichar>=jumlahchar:
                       posisichar=0
                       
                    if(len(datakotak)<=x): datakotak.append([])
                    datakotak[x].append([])
                    datakotak[x][n]=self.char[posisichar]
                    
                    if n>0:
                        #print("n ",n," jumlahrotate ",jumlahrotate," rotasi ",rotasi," xrotate ",int(jumlahrotate/(jumlahchar*n)),"arrblok ",arrblokdata[i],"kotak ",jumlahkotak[i]," posisichar ",posisichar)
                        rotasi=rotasi+1
                        if int(jumlahrotate/pow(jumlahchar,n)==rotasi) :
                            rotasi=0
                            posisichar=posisichar+1
                    else:
                        rotasi=rotasi+1
                        if rotasi==jumlahrotate:
                            rotasi=0
                            posisichar=posisichar+1
                    #print datakotak
                    
            if(len(datakotak)>0) :
                kolom.append(datakotak)
        
        print kolom
    
    def buatfile(self,judul=[],datakey=[],kolom=[],folder="",namafile="",datars=[]):
        reload(sys)  
        sys.setdefaultencoding('Cp1252')
        print "buat"
        namafile=folder+namafile+".xlsx"
        print namafile
        workbook = xlsxwriter.Workbook(namafile)
        worksheet = workbook.add_worksheet()
        print(len(judul),len(datakey))
        if len(judul)!=len(datakey): return False
        for i in range(len(judul)):
            worksheet.write(0, i, judul[i])
        
        nomordata=1
        for i in range(len(datars)):
            for n in range(len(datakey)):
                #print datars[i][datakey[n]['label']]
                strdata=''
                if datakey[n]['label']=="nomordata":
                   strdata=str(nomordata) 
                elif datars[i].has_key(datakey[n]['label']):
                    datakolom=''
                    if datars[i][datakey[n]['label']]!=None:
                        datakolom=datars[i][datakey[n]['label']]
                        
                    if datakey[n]['jenis']=='str':
                        strdata=str(datakolom)
                    elif datakey[n]['jenis']=='angka':
                        strdata=datakolom
                    else:
                        strdata=datakolom
                worksheet.write(i+1, n, strdata)
            
            nomordata=nomordata+1
        
        workbook.close()
        return True
        
        