Как преобразовать XLSX-файлы в 2003 XLS-файлы программно в C #? - PullRequest
2 голосов
/ 30 апреля 2009

Я нашел ExcelPackage , лучшую библиотеку, чем Excel Interop API, для создания и ведения программно листов Excel, но они генерируются в формате .xlsx. У большинства людей, которые увидят эти файлы, установлен только Office 2003, поэтому мне нужно преобразовать конечный результат в моем коде C # в файл .xls.

Знаете ли вы, как это сделать в C # код ?

** ОБНОВЛЕНИЕ Я пытаюсь использовать метод SaveAs, но он не работает, он просто ничего не делает или возвращает ошибку 0x800A03EC.

Ответы [ 4 ]

5 голосов
/ 30 апреля 2009

Я подозреваю, что это не будет популярным ответом, но я не верю, что желательно конвертировать файлы в .xls из .xlsx (я собирался предположить, что в этом нет необходимости, но, к сожалению, это обобщение слишком далеко).

«Пакет обеспечения совместимости Microsoft Office» можно бесплатно загрузить и добавляет поддержку новых форматов в Office XP и Office 2003, что намного лучше, поэтому, по крайней мере, в общем случае, чтобы убедить пользователей довести свои системы до спецификаций чем мучиться с необходимостью иметь дело с офисным взаимодействием (которое, по сути, причинит вам и, возможно, вашим пользователям, много боли). Точно так же я считаю, что есть поддержка новых форматов в Open Office 3.

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

1 голос
/ 30 апреля 2009

Вы можете попробовать использовать Microsoft.Office.Interop.Excel. Вам нужно будет установить Excel на компьютер, который пытается выполнить преобразование. Вы можете добавить ссылку на вкладке COM и использовать компонент библиотеки объектов Microsoft Excel 12.0.

По сути, вы откроете существующую книгу с помощью Workbook.Open (), создадите новую рабочую таблицу и скопируете существующие данные. Затем вы можете использовать метод Workbook.SaveAs (), это позволит вам установить формат файла во втором параметре.

0 голосов
/ 15 марта 2011

Вот фрагмент кода из моего проекта с IBM iSeries. Он преобразует ЛЮБОЙ файл Excel в Excel 2003:

string MOVE_DOWNLOADED(string FILENAME)
{
  string Path = FILENAME;
  Microsoft.Office.Interop.Excel.ApplicationClass app = new Microsoft.Office.Interop.Excel.ApplicationClass();           
  Microsoft.Office.Interop.Excel.Workbook workBook = app.Workbooks.Open(Path,
    0,
    true,
    5,
    "",
    "",
    true,
    Microsoft.Office.Interop.Excel.XlPlatform.xlWindows,
    "\t",
    false,
    false,
    0,
    true,
    1,
    0);

  string retval = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\" + "_tmp_" + ".xlsx";

  try
  {
    workBook.SaveAs(retval, 
      Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel9795, 
      null, 
      null, 
      false, 
      false, 
      Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, 
      false, 
      false,
      null,
      null,
      null);
  }
  catch (Exception E)
  {
    MessageBox.Show(E.Message);
  }

  workBook.Close(null, null, null);
  System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook);
  workBook = null;
  GC.Collect(); // force final cleanup!

  return retval;    
}
0 голосов
/ 03 августа 2009

Попробуйте этот код:

        try
        {
            Microsoft.Office.Interop.Word.ApplicationClass oWord = new ApplicationClass();
            object oMissing = Type.Missing;
            object fileName = @"c:\test.docx";
            Document oDoc = oWord.Application.Documents.Open(ref fileName, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
            object fileName2 = @"c:\test2.doc";

            object fileFormat = WdSaveFormat.wdFormatDocument97;
            oDoc.SaveAs(ref fileName2, ref fileFormat, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);

            oDoc.Close(ref oMissing, ref oMissing, ref oMissing);
            oWord = null;
            Console.WriteLine("Done");

        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
        Console.Read();
...