是否从数据库/Excel/CSV转换为YAML数据装置?

是否从数据库/Excel/CSV转换为YAML数据装置?,excel,csv,symfony1,doctrine,yaml,Excel,Csv,Symfony1,Doctrine,Yaml,我想知道是否有一个简单的方法可以将结构化文件转换为Doctrine/Symfony的YAML数据装置 我看不到任何接受CSV的实用程序 我可能会开始写一些简单的东西来做这件事。值得吗?谷歌快速搜索得出以下结论: 虽然需要Python,但这应该不是问题。看起来很有希望,并且完全符合您的需要(请记住,CSV文件可以像本地excel文件一样使用excel打开并保存为.xls)我编写了自己的宏来解决此问题并将其共享。您可以在模型中指定字段,填写数据并生成YAML。 最好的部分是它还支持嵌套数据(基于嵌套

我想知道是否有一个简单的方法可以将结构化文件转换为Doctrine/Symfony的YAML数据装置

我看不到任何接受CSV的实用程序


我可能会开始写一些简单的东西来做这件事。值得吗?

谷歌快速搜索得出以下结论:


虽然需要Python,但这应该不是问题。看起来很有希望,并且完全符合您的需要(请记住,CSV文件可以像本地excel文件一样使用excel打开并保存为.xls)

我编写了自己的宏来解决此问题并将其共享。您可以在模型中指定字段,填写数据并生成YAML。 最好的部分是它还支持嵌套数据(基于嵌套集原则行为)

您可以从此处下载该文件:


希望这有帮助

如果已经在使用转换宏,则可以添加一个函数,该函数将从CSV数据创建PHP脚本。因此,对象“笔”的数据行如下所示: 名称类型价格

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);
以下是宏函数:

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
Sub-GeneratePHP()
targetSheetRow=1
fieldNamesRow=3
sourceSheetDataRow=fieldNamesRow+1
EarlyOpenD=False
计数器=0
'在没有活动工作表的情况下不运行
如果ActiveSheet.Name=”“,则
MsgBox“请从工作表调用宏”
终点
如果结束
“识别床单
设置source=ActiveSheet
'自定义输出表
targetSheetName=source.Cells(1,12)
如果targetSheetName=“”或targetSheetName=“输出”,则
targetSheetName=“输出”
其他的
关于错误转到RTE
设置目标=工作表(targetSheetName)
转到RTS
RTE:
'MsgBox“PG”&错误说明,标题:=Err.Source
targetSheetName=“输出”
如果结束
即时战略:
'清除目标/输出表中的现有数据
设置目标=工作表(targetSheetName)
目标。细胞。清除
Target.Cells.Font.Name=“信使”
'获取模型中的字段数(假定级别和键始终存在)
noOfCols=2
Do While source.Cells(fieldNamesRow,noOfCols+1)“结束”
noOfCols=noOfCols+1
环
'如果除级别和键外没有其他字段,则出错
如果noOfCols<3,则
MsgBox“没有记录的数据”
终点
如果结束
'打印型号名称
Target.Cells(targetSheetRow,1)=“//对象:”+源.Cells(1,4)
targetSheetRow=targetSheetRow+1
objClass=源单元格(1,4)
'在源工作表中的数据行上循环
Do While source.Cells(sourceSheetDataRow,1)“结束”
如果source.Cells(sourceSheetDataRow,1)=“结束循环”,则
Target.Cells(targetSheetRow,1)=“”
targetSheetRow=targetSheetRow+1
EarlyOpenD=True
下一站
如果结束
'要跳过的行
如果source.Cells(sourceSheetDataRow,2)=“~!~”或source.Cells(sourceSheetDataRow,1)=“~!~”则
下一站
如果结束
'读取级别
空格=source.Cells(sourceSheetDataRow,1)
'打印键
计数器=计数器+1
varName=“$”+LCase(对象类)+CStr(计数器)
varDec=varName+“=new”+objClass+“();”
Target.Cells(targetSheetRow,1)=varDec
targetSheetRow=targetSheetRow+1
空格=空格+“”
空间计数=空间计数+2
'当值为时打印字段!=~~
对于clNumber=3到noOfCols
如果CStr(source.Cells(sourceSheetDataRow,clNumber))“~!~”和CStr(source.Cells(fieldNamesRow,clNumber))“~!~”则
Target.Cells(targetSheetRow,1)=varName+“->”+源.Cells(fieldNamesRow,clNumber)+“=”+CStr(source.Cells(sourceSheetDataRow,clNumber))+”
targetSheetRow=targetSheetRow+1
如果结束
下一个号码
Target.Cells(targetSheetRow,1)=varName+“->save();”
targetSheetRow=targetSheetRow+1
Target.Cells(targetSheetRow,1)=“unset”(+varName+)
targetSheetRow=targetSheetRow+1
下一步:
'转到源工作表中的下一行
sourceSheetDataRow=sourceSheetDataRow+1
环
"成功",
msg=“来自工作表”&source.Name&“的数据已在”&targetSheetName&“sheet”&vbCrLf&vbCrLf&“prasagupte.com”上转换为YAML
MsgBox味精
'关注输出表
工作表(targetSheetName)。选择
范围(“A1:A”和(targetSheetRow-1))。选择
端接头
你可以试试(免责声明-我是它的开发者)。它在本地CSV、JSON、XML和YML之间进行转换

它有许多转换设置(具有良好的默认设置),因此您可以根据自己的目的定制结果

您可以从或中获取


没有试用版,但如果对你不起作用,你可以向苹果或微软要求退款

谢谢格罗索斯博士,我碰到了这个。。。但是以前从未使用过Python,甚至不知道运行这样的脚本需要什么。。我会努力做一些简单的事情。。把它贴在这里。。。感谢投票对个人来说并不重要,但它会让求职者对答案充满信心。300多次访问/下载,这里只需2次投票。。