C# и Excel interop

Вдохновленный более ранними сообщениями я сделал копию Rakefile и поставщик каталоги распределенный с WysiHat (RTE упомянутый журналом изменений) и сделал несколько модификаций для включения сверения кода JSLint и минификация с [1 111] Компрессор YUI .

идея состоит в том, чтобы использовать Звездочки (от WysiHat), чтобы объединить несколько JavaScripts в один файл, проверить синтаксис объединенного файла с JSLint и уменьшить его с Компрессором YUI перед распределением.

Предпосылки

  • Среда выполнения Java
  • рубин и драгоценный камень граблей
  • необходимо знать, как поместить JAR в [1 113], Путь к классу

Теперь делает

  1. Загрузка Носорог и помещает JAR ("js.jar") в путь к классу
  2. Загрузка Компрессор YUI и помещает JAR (build/yuicompressor-xyz.jar) в путь к классу
  3. Загрузка WysiHat и копирует каталог "поставщика" в корень проекта
  4. JavaScript Загрузка JSLint для Носорога и помещает его в каталоге

"поставщика", Теперь создают файл по имени "Rakefile" в корневом каталоге проекта JavaScript и добавляют следующее содержание к нему:

require 'rake'

ROOT            = File.expand_path(File.dirname(__FILE__))
OUTPUT_MERGED   = "final.js"
OUTPUT_MINIFIED = "final.min.js"

task :default => :check

desc "Merges the JavaScript sources."
task :merge do
  require File.join(ROOT, "vendor", "sprockets")

  environment  = Sprockets::Environment.new(".")
  preprocessor = Sprockets::Preprocessor.new(environment)

  %w(main.js).each do |filename|
    pathname = environment.find(filename)
    preprocessor.require(pathname.source_file)
  end

  output = preprocessor.output_file
  File.open(File.join(ROOT, OUTPUT_MERGED), 'w') { |f| f.write(output) }
end

desc "Check the JavaScript source with JSLint."
task :check => [:merge] do
  jslint_path = File.join(ROOT, "vendor", "jslint.js")

  sh 'java', 'org.mozilla.javascript.tools.shell.Main',
    jslint_path, OUTPUT_MERGED
end

desc "Minifies the JavaScript source."
task :minify => [:merge] do
  sh 'java', 'com.yahoo.platform.yui.compressor.Bootstrap', '-v',
    OUTPUT_MERGED, '-o', OUTPUT_MINIFIED
end

, Если Вы сделанный все правильно, необходимо быть в состоянии использовать следующие команды в консоли:

  • rake merge - для слияния различных файлов JavaScript в один
  • rake check - для проверки синтаксиса кода (это значение по умолчанию задача, таким образом, Вы можете просто тип rake)
  • rake minify - для подготовки уменьшенной версии кода JS

На источнике, объединяющемся

Используя Звездочки препроцессор JavaScript, можно включать (или require) другие файлы JavaScript. Используйте следующий синтаксис для включения других сценариев из начального файла (названный "main.js", но можно изменить это в Rakefile):

(function() {
//= require "subdir/jsfile.js"
//= require "anotherfile.js"

    // some code that depends on included files
    // note that all included files can be in the same private scope
})();

И затем...

Смотрят на Rakefile, которому предоставляют WysiHat для установки автоматизированного поблочного тестирования. Хороший материал:)

И теперь для ответа

Это не отвечает на исходный вопрос очень хорошо. Я знаю, и я сожалею об этом, но я отправил его здесь, потому что я надеюсь, что для кого-то еще может быть полезно организовать их путаницу.

Мой подход к проблеме должен сделать столько же объектно-ориентированного моделирования, я могу и разделять реализации на различные файлы. Тогда обработчики должны быть максимально короткими. Примером с List одиночный элемент является также хороший.

И пространства имен... хорошо им может подражать более глубокая структура объекта.

if (typeof org === 'undefined') {
    var org = {};
}

if (!org.hasOwnProperty('example')) {
    org.example = {};
}

org.example.AnotherObject = function () {
    // constructor body
};

я не большой поклонник имитаций, но это может быть полезно, если бы у Вас есть много объектов, которые требуется переместить из глобальной области видимости.

10
задан Michael Currie 11 September 2015 в 05:21
поделиться

3 ответа

"Я думал, что с помощью PIA я бы не нужно беспокоиться о версии Excel вопросы. Я знаю, что есть другие пользователи используя Excel 2000, и он работает на моем snk с помощью переключателя / keyfile, как показано в статье Как создать первичную сборку взаимодействия (PIA) . В этой статье также используется переключатель / primary для создания «основной сборки взаимодействия». Делать сборку взаимодействия первичной в вашем случае не обязательно, но это не повредит. Однако в статье не упоминается использование переключателя / sysarray, который вам следует использовать.

Однако создание сборки взаимодействия со строгими именами требует рассмотрения некоторых сложностей. Дополнительные сведения см. В Использование TLBIMP.exe для создания сборок взаимодействия со строгими именами . (Среди прочего, в этой статье объясняется необходимость переключателя / sysarray.)

Короче говоря, создать настраиваемую сборку взаимодействия очень просто, если ваша сборка не имеет строгого имени. Сложнее, если ваша сборка имеет строгое имя и, следовательно, вам необходимо создать сборку взаимодействия со строгим именем. Но, надеюсь, эти статьи помогут вам начать работу.

- Mike

14
ответ дан 3 December 2019 в 22:01
поделиться

Я использую Microsoft.Office.Interop.Excel.dll: Версия выполнения: v1.1.4322 Версия: 12.0.0.0

Можно попробовать следующее:

  private object mMissingValue = System.Reflection.Missing.Value;

  private void CreateWorkbook(string fileName)
  {
     if (File.Exists(fileName))
     {
        // Create the new excel application reference
        mExcelApplication = new Application();
        // Open the file
        Workbook excel_workbook = mExcelApplication.Workbooks.Open(templatePath,
              mMissingValue, mMissingValue, mMissingValue, mMissingValue, mMissingValue,
              mMissingValue, mMissingValue, mMissingValue, mMissingValue, mMissingValue,
              mMissingValue, mMissingValue, mMissingValue, mMissingValue);
        Worksheet sheet = (Worksheet)mExcelWorkbook.Worksheets[1];
    }
 }
2
ответ дан 3 December 2019 в 22:01
поделиться

Я предпочел сохранять файлы Excel в виде таблиц XML, а затем открывать их с помощью объектов System.Xml. XML я использую много для самых разных вещей, в то время как Interop для меня что-то вроде черного искусства. Возможно, этого недостаточно для ваших нужд, но если это так, это, вероятно, намного проще, чем связываться с библиотеками взаимодействия.

0
ответ дан 3 December 2019 в 22:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: