做U3d編輯器xlsx批量產生csv和python批量轉

來源:互聯網
上載者:User

標籤:編輯器   3d   c#   csv   


做U3d編輯器xlsx批量產生csv
xlsx編輯就是用強大的office Excel 2013 ,  
也就是說 不管是程式還是美術只需要維護這個Excel就夠了,然後一鍵批量轉化為csv檔案即可! 打包不會打包Excel,遊戲中也不用這個!然後來到Unity3d的編輯器菜單。
在Unity的Editor檔案夾下面需要這四個檔案:


參考了:http://www.codeproject.com/Articles/246772/Convert-xlsx-xls-to-csv 的window視窗程序。 

遊戲中使用CSV的方法,在github上有一個很好的方法:https://github.com/cunkai/Unity-CSV-To-C-Sharp
Unity CSV轉為C#檔案 來省去解析csv的步驟,節省遊戲載入時間。

有人會問?為什麼不直接使用Excel的xlsx檔案,因為相同的內容檔案大小比csv大很多。

看看代碼吧: 相關的路徑可以根據項目變更!


using UnityEngine;using System.Data;using System.IO;using Excel;using UnityEditor;/// <summary>/// Xlsl to CS./// </summary>public class XlslToCSV : EditorWindow {static string foldername = Application.dataPath;static DataSet result = new DataSet();[MenuItem("Games/Excel To CSV &%#c")]// 要訪問的Excelstatic void Menu_Click(){string Chosen_File = Application.dataPath + "/Editor" + "/test.xlsx";       // Excel的 xlsx的檔案路徑getExcelData(Chosen_File);}static void getExcelData(string file){if (file.EndsWith(".xlsx")){// Reading from a binary Excel file (format; *.xlsx)FileStream stream = File.Open(file, FileMode.Open, FileAccess.Read);IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);result = excelReader.AsDataSet();excelReader.Close();}if (file.EndsWith(".xls")){// Reading from a binary Excel file (‘97-2003 format; *.xls)FileStream stream = File.Open(file, FileMode.Open, FileAccess.Read);IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);result = excelReader.AsDataSet();excelReader.Close();}//List<string> items = new List<string>();    // 得到所有表的表名for (int i = 0; i < result.Tables.Count; i++) {//items.Add(result.Tables[i].TableName.ToString());converToCSV(i, result.Tables[i].TableName.ToString());}}static void converToCSV(int index, string OLdfileName){// sheets in excel file becomes tables in dataset//result.Tables[0].TableName.ToString(); // to get sheet name (table name)string a = "";int row_no = 0;while (row_no < result.Tables[index].Rows.Count){for (int i = 0; i < result.Tables[index].Columns.Count; i++){a += result.Tables[index].Rows[row_no][i].ToString() + ",";}row_no++;a += "\n";}string output = foldername + "/Editor" + "\\" + OLdfileName + ".csv";                     // 要儲存的檔案路徑StreamWriter csv = new StreamWriter(@output, false);csv.Write(a);csv.Close();Debug.Log("File converted succussfully");return;}}

其實這樣做也是存在一個問題,策劃也是很少使用Unity的, 他們在配置完xlsx後總不能都要開啟Unity然後點擊菜單進行轉化吧。


那麼現在就說說強大的python實現方式: 參考https://github.com/amengren/xls2csv

也是藉助第三方的擴充。

將xls xlsx 格式的檔案轉換為csv(‘,‘分隔,以‘\\n’行結束符(當然也可以設定為其他的呀!))

需要安裝xlrd模組 https://pypi.python.org/pypi/xlrd (安裝說明在本文最後!)

使用方法:
將xls檔案和當前模組放同一個檔案夾,執行指令碼,自動在當前檔案產生csv

xls2csv.py

# encoding: utf-8import os,sys,inspect,reimport xdrlib,xlrdreload(sys)sys.setdefaultencoding("utf-8")#分割符C_SPACE = ","#結束符C_END = "\n"#擷取指令檔的當前路徑def cur_file_dir():    path = os.path.realpath(sys.path[0])    print path    if os.path.isfile(path):        print "exe"        path = os.path.dirname(path)        return os.path.abspath(path)    else:        print "檔案"        caller_file = inspect.stack()[1][1]        return os.path.abspath(os.path.dirname(caller_file))#搜尋指定檔案夾下面的檔案(預設目前的目錄)def find_file_by_pattern(pattern=‘.*‘, base=".", circle=True):      ‘‘‘‘‘尋找給定檔案夾下面所有 ‘‘‘    re_file = re.compile(pattern)    if base == ".":        base = cur_file_dir()    print "開始搜尋資料夾:",base    final_file_list = []    cur_list = os.listdir(base)      for item in cur_list:        # print item        if item == ".svn":            continue                  full_path = os.path.join(base, item)        if full_path.startswith("~"):            continue        if full_path.endswith(".xlsx") or full_path.endswith(".xls"):            print "in:" + full_path            bfile = os.path.isfile(item)            if os.path.isfile(full_path):                if re_file.search(full_path):                    final_file_list.append(full_path)              else:                final_file_list += find_file_by_pattern(pattern, full_path)    ‘‘‘返迴文件列表‘‘‘    return final_file_list#開啟exceldef open_excel(file= ‘file.xls‘):    try:        data = xlrd.open_workbook(file)        return data    except Exception,e:        print str(e)#根據索引擷取Excel表格中的資料 參數:file:Excel檔案路徑, colnameindex:表頭列名所在行的索引, by_index:表的索引def excel_table_byindex(file=‘file.xls‘, colnameindex=0, by_index=0):    data = open_excel(file)    table = data.sheets()[by_index]    nrows = table.nrows #行數    ncols = table.ncols #列數    rowlist = []    # print heads    ‘‘‘開始讀取資料‘‘‘    for rownum in range(colnameindex, nrows):        rowdata = table.row_values(rownum)        if rowdata:            collist = []            for i in range(ncols):                collist.append(rowdata[i])            rowlist.append(collist)    return rowlist#儲存csv檔案def savaToCSV(_file, _list, _path):    filename = ""    content = ""    #組建檔案內容    for collist in _list:        for i in range(len(collist)):            v = collist[i]            vstr = ""            # print k,v            if isinstance(v, float) or isinstance(v, int):                vstr = str(int(v))            else:# elif isinstance(v, str):                vstr = v            if i > 0:                content = content + C_SPACE            content = content + vstr        content = content + C_END    #組建檔案尾碼    fname = os.path.splitext(_file)    filename = fname[0] + ".csv"    #寫檔案    if len(filename)>0 and len(content)>0:        # filename = _path + "/" + filename        print "out:" + filename        file_object = open(filename, ‘w‘)        file_object.write(content)        file_object.close()def main():    filelist = find_file_by_pattern()    if len(filelist) > 0:        path = ""        # if not os.path.isdir(path):        #     os.makedirs(path)        #遍曆檔案產生csv        for file in filelist:            datalist = excel_table_byindex(file, 0)            if len(datalist)>0:                savaToCSV(file, datalist, path)    else:        print "沒有找到任何excel技能檔案!"if __name__=="__main__":    main()


python環境變數配置:         在“Path”行,添加python安裝在win下面的路徑即可,本人python安裝在E:\Python27,所以在後面,添加該路徑即可。
ps:記住,路徑直接用分號“;”隔開!

ps : 安裝xlrd-0.9.3.tar。  由於我沒把python安裝在系統硬碟所以要手動的拷貝scripts 和 xlrd 到python的系統安裝路徑中(有的是 合并檔案夾)。ps : 建議安裝python就安裝在系統硬碟中即可。







??

做U3d編輯器xlsx批量產生csv和python批量轉

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.