У меня проблемы с добавлением десятичных знаков к существующему файлу Excel через sequel / ado.
Я копирую существующий файл Excel (template = 'minimal_template.xlsx
) с двумя столбцами col1
и col2
, затем вставляю два десятичных знака.
Результат содержит данные, но в виде строк:
Итак, мой вопрос: как я могу добавить десятичные знаки в качестве десятичных знаков в Excel, когда я использую ADO-соединение?
Минимальный пример:
require 'sequel'
require 'fileutils'
template = 'minimal_template.xlsx'
targetfile = File.expand_path('result.xlsx')
FileUtils.copy(template, targetfile)
puts 'create %s' % targetfile
db = Sequel.ado(:conn_string=>"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=#{targetfile};Extended Properties=Excel 8.0;")
target = db[db.tables.first]
target.insert([0.1, 0.2]) #add decimals.
То, что я уже пробовал:
- Столбцы в шаблоне уже отформатированы как числа, но после вставки они становятся строкой.
- Использование другого способа создания xlsx (axls, roo ...) невозможно в моем случае использования. Я должен использовать существующий шаблон.
- Использование OLE для манипулирования не возможно (Excel не установлен)
- Я могу преобразовать формат в Excel, но это ручной процесс, и я боюсь, что это будет неправильно, если кто-то с другим языковым стандартом попытается преобразовать значение.
Я использую Sequel 5.22, но я думаю, что это не проблема Sequel.
В sequel/adapters/ado/access.rb:111
вызывается следующая SQL-команда с десятичными знаками:
"INSERT INTO [Tabelle1$] VALUES (0.1, 0.2)"
Так что, думаю, это проблема ADO.
Обновление:
С puts db.schema(target).to_yaml
я получаю:
- - :col1
- :allow_null: true
:db_type: TEXT(255)
:default:
:primary_key: false
:type: :string
:ado_type: 130
:ruby_default:
:max_length: 255
- - :col2
- :allow_null: true
:db_type: TEXT(255)
:default:
:primary_key: false
:type: :string
:ado_type: 130
:ruby_default:
:max_length: 255
Так что проблема действительно в ADO. Я пытался использовать schema.ini , но без успеха