从数据库/ Excel / CSV转换成YAML数据装置?

想知道是否有一个容易将结构化文件转换为教条/ Symfony的YAML数据装置。

Doctrine没有接受CSV的实用工具。

我可能只是开始写一些简单的事情来做到这一点。 这是值得的吗?

我写了自己的macros来解决这个问题并且分享了。 您可以指定模型中的字段,填写数据并生成YAML。 最好的部分是它也支持嵌套数据 (基于NestedSet主义行为)

您可以从这里下载该文件: http : //www.prasadgupte.com/go/converting-csvexcel-data-to-doctrine-yaml-fixtures/

希望这可以帮助!

快速谷歌search了这个: http : //code.activestate.com/recipes/546518-simple-conversion-of-excel-files-into-csv-and-yaml/

需要Python,但这不应该是一个问题。 看起来相当有前途,并且完全符合您的需求(请记住,CSV文件可以用本地excel文件打开并保存为.xls)

如果您已经在使用转换macros,那么您可以添加一个函数,该函数将从CSV数据创build一个PHP脚本。 因此,对于“笔”的数据行如:名称types的价格

Pen Name, Type, Price "Reyballs Super Point 0.5", "Ball point", 10 "Palkar Ink Pen", "Ink Pen", 25 

会输出:

 // Object: Pen $pen1 = new Pen(); $pen1->name = "Reyballs Super Point 0.5"; $pen1->type = "Ball point"; $pen1->price = "10"; $pen1->save(); unset($pen1); $pen2 = new Pen(); $pen2->name = "Palkar Ink Pen"; $pen2->type = "Ink Pen"; $pen2->price = "25"; $pen2->save(); unset($pen2); 

这里是macrosfunction:

 Sub GeneratePHP() targetSheetRow = 1 fieldNamesRow = 3 sourceSheetDataRow = fieldNamesRow + 1 earlyLoopEnd = False counter = 0 ' do not run without active sheet If ActiveSheet.Name = "" Then MsgBox "Please call the macro from a sheet" End End If ' identify sheets Set source = ActiveSheet ' custom output sheet targetSheetName = source.Cells(1, 12) If targetSheetName = "" Or targetSheetName = "Output" Then targetSheetName = "Output" Else On Error GoTo RTE Set Target = Worksheets(targetSheetName) GoTo RTS RTE: 'MsgBox "PG" & Err.Description, Title:=Err.Source targetSheetName = "Output" End If RTS: ' clear exsiting data in Target/Output sheet Set Target = Worksheets(targetSheetName) Target.Cells.Clear Target.Cells.Font.Name = "Courier" ' Get no of fields in model (assume level & key always there) noOfCols = 2 Do While source.Cells(fieldNamesRow, noOfCols + 1) <> "end" noOfCols = noOfCols + 1 Loop ' If no field other than level & key, error If noOfCols < 3 Then MsgBox "No data for the records" End End If ' print Model name Target.Cells(targetSheetRow, 1) = "// Object: " + source.Cells(1, 4) targetSheetRow = targetSheetRow + 1 objClass = source.Cells(1, 4) ' Loop over data rows in source sheet Do While source.Cells(sourceSheetDataRow, 1) <> "end" If source.Cells(sourceSheetDataRow, 1) = "end-loop" Then Target.Cells(targetSheetRow, 1) = "<?php endfor; ?>" targetSheetRow = targetSheetRow + 1 earlyLoopEnd = True GoTo NextRow End If ' rows to skip If source.Cells(sourceSheetDataRow, 2) = "~!~" Or source.Cells(sourceSheetDataRow, 1) = "~!~" Then GoTo NextRow End If ' read level blanks = source.Cells(sourceSheetDataRow, 1) ' print key counter = counter + 1 varName = "$" + LCase(objClass) + CStr(counter) varDec = varName + " = new " + objClass + "();" Target.Cells(targetSheetRow, 1) = varDec targetSheetRow = targetSheetRow + 1 spaces = spaces + " " spaces_count = spaces_count + 2 ' print fields when value != ~!~ For clNumber = 3 To noOfCols If CStr(source.Cells(sourceSheetDataRow, clNumber)) <> "~!~" And CStr(source.Cells(fieldNamesRow, clNumber)) <> "~!~" Then Target.Cells(targetSheetRow, 1) = varName + "->" + source.Cells(fieldNamesRow, clNumber) + " = """ + CStr(source.Cells(sourceSheetDataRow, clNumber)) + """;" targetSheetRow = targetSheetRow + 1 End If Next clNumber Target.Cells(targetSheetRow, 1) = varName + "->save();" targetSheetRow = targetSheetRow + 1 Target.Cells(targetSheetRow, 1) = "unset(" + varName + ");" targetSheetRow = targetSheetRow + 1 NextRow: ' go for next row in source sheet sourceSheetDataRow = sourceSheetDataRow + 1 Loop ' Success msg = "Data from sheet """ & source.Name & """ was converted to YAML on """ & targetSheetName & """ sheet" & vbCrLf & vbCrLf & "prasadgupte.com" MsgBox msg ' Focus on output sheet Sheets(targetSheetName).Select Range("A1:A" & (targetSheetRow - 1)).Select End Sub