Данные взяты с сервера SQL, где проблемные поля являются целыми числами. Отображаемые значения ссылаются в QGIS с помощью ValueRelation на некоторые таблицы внешних ключей.
Вот что я пробовал.
Каждый раз происходит сбой. Я пробовал вывод как f'{output}\\site' и f'{output}\\site.shp'.
Код: Выделить всё
options = QgsVectorFileWriter.SaveVectorOptions()
options.driverName = "ESRI Shapefile"
options.encoding = 'utf-8'
options.onlySelectedFeatures = True
options.actionOnExistingFile = QgsVectorFileWriter.CreateOrOverwriteFile
options.fieldValueConverter = QgsVectorFileWriter.FieldValueConverter()
transform_context = QgsProject.instance().transformContext()
error = QgsVectorFileWriter.writeAsVectorFormatV3(inputlayer, f'{output}\\site', transform_context, options)
if error[0] == QgsVectorFileWriter.NoError:
print("success again!")
else:
print(error)
Это решение создает выходной файл без сообщения об ошибке, но значения атрибутов по-прежнему отображаются как целые числа. а не отображаемые значения строки.
Код: Выделить всё
layer = someQGSVectorLayerwithSelectedFeatures
class CustomFieldValueConverter(QgsVectorFileWriter.FieldValueConverter):
def __init__(self, layer):
QgsVectorFileWriter.FieldValueConverter.__init__(self)
self.layer = layer
def fieldDefinition(self, field):
return field
def convert(self, idx, value):
return value
def clone(self):
return FieldValueConverter(self)
layer = iface.activeLayer()
options = QgsVectorFileWriter.SaveVectorOptions()
myconverter = CustomFieldValueConverter(layer)
options.fieldValueConverter = myconverter
options.driverName = "ESRI Shapefile"
options.encoding = 'utf-8'
options.onlySelectedFeatures = True
options.actionOnExistingFile = QgsVectorFileWriter.CreateOrOverwriteFile
context = QgsProject.instance().transformContext()
error_message = QgsVectorFileWriter.writeAsVectorFormatV3(layer, mypath, context, options)
Подробнее здесь: https://stackoverflow.com/questions/791 ... raw-values
Мобильная версия