Добавьте десятичные значения в Excel через ADO-соединение - PullRequest
2 голосов
/ 11 июля 2019

У меня проблемы с добавлением десятичных знаков к существующему файлу Excel через sequel / ado.

Я копирую существующий файл Excel (template = 'minimal_template.xlsx) с двумя столбцами col1 и col2, затем вставляю два десятичных знака.

Результат содержит данные, но в виде строк: Excel Screenshot (German): The values are strings

Итак, мой вопрос: как я могу добавить десятичные знаки в качестве десятичных знаков в 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 , но без успеха

...