Hi,
i have a problem when exporting a table from a featurelayer with TableToExcel if the featurelayer has unchecked fields. It comes the error message RuntimeError: Cannot find field. The same works fine if no unchecked fields are available.
Here is my code snippet:
Dim objFLayer as IFeatureLayer = me.Layer
Dim objGP As IGeoProcessor = New GeoProcessor
Dim strOutFile As String = IO.Path.Combine(ExportFactory.GetProjectPath(ExportPathEnum.ExportPathEmbfiles),
Me.ID & ".xls")
Try
objGP.OverwriteOutput = True
objParameters = New VarArray
' Populate the variant array with parameter values.
objParameters.Add(objFLayer)
objParameters.Add(strOutFile)
' Execute the model tool by name.
Dim objResult As IGeoProcessorResult = objGP.Execute("TableToExcel_conversion", objParameters, Nothing)
Catch ex As Exception
Finally
System.Runtime.InteropServices.Marshal.ReleaseComObject(objGP)
objGP = Nothing
End Try
Someone has an idea? Thank you
Armin
Solved! Go to Solution.
Hi Duncan,
thank you for your solution. In the meantime i has also find a solution.
Insead of using the ilayer object as parameter input i use the ilayer.name now. After this change it works correct and only the checked fields will be used.
Armin
Armin,
I have been having a go in VBA at resolving your problem. I too can make it come up with an error message if 1 or more fields has been turned off. Unfortunately I have been unable to resolve it but I did come up with a partial fix that stopped it returning an error. So if you had a dataset with some fields turned off the following code allowed it to run but it ignored the turned off fields. The result is a table in Excel as if you had not turned off any fields...
I think this is a bug (hopefully the ESRI developers will pick up on this thread?) or requires some esoteric fix that is not documented anywhere!
So here is my partial fix:
Public Sub test() 'Get Map Dim pMXDoc As IMxDocument Set pMXDoc = ThisDocument Dim pMap As IMap Set pMap = pMXDoc.FocusMap ' Get FeatureLayer (has some fields turned off) Dim pLayer As ILayer Set pLayer = pMap.Layer(0) Dim pFL As IGeoFeatureLayer Set pFL = pLayer ' Create geoProcessor Dim pGP As IGeoProcessor2 Set pGP = New GeoProcessor pGP.OverwriteOutput = True pGP.AddOutputsToMap = False ' Create parameters Dim pVA As IVariantArray Set pVA = New VarArray With pVA .Add pFL.DisplayFeatureClass .Add "temp" End With 'Make a tableView called "temp" Dim pRes As IGeoProcessorResult2 Set pRes = pGP.Execute("MakeTableView_management", pVA, Nothing) If pRes.Status = esriJobFailed Then Debug.Print "Failed tableview" Exit Sub End If ' Create parameters With pVA .RemoveAll .Add "temp" .Add "c:\scratch\test.xls" End With ' Execute tool Set pRes = pGP.Execute("TableToExcel_conversion", pVA, Nothing) If pRes.Status = esriJobSucceeded Then Debug.Print "OK!" End If End Sub
Hi Duncan,
thank you for your solution. In the meantime i has also find a solution.
Insead of using the ilayer object as parameter input i use the ilayer.name now. After this change it works correct and only the checked fields will be used.
Armin
Unbelievable! I spent nearly an hour looking at this problem as I would have typically passed in the IFeaturelayer object as a parameter. So all you had to do is pass in the layer name instead...
I wish ESRI would document these important but subtle differences.