2

プログラムで優れたシートを作成および管理するには、Excel Interop APIよりも優れたライブラリであるExcelPackageを見つけましたが、それらは.xlsxで生成されます。ファイルを表示するほとんどの人はOffice2003のみをインストールしているため、C#コードで最終結果を.xlsファイルに変換する必要があります。

C#コードでそれを行う方法を知っていますか?

** UPDATE SaveAsメソッドを使用しようとしていますが、機能しないか、何も実行されないか、エラー0x800A03ECが返されます。

4

4 に答える 4

5

これは一般的な答えではないと思いますが、ファイルを.xlsxから.xlsに変換することが望ましいとは思いません(必要ではないことを示唆しましたが、残念ながら、それは一般化です遠すぎる)。

「MicrosoftOffice互換性パック」は無料でダウンロードでき、OfficeXPとOffice2003に新しい形式のサポートを追加します。したがって、少なくとも一般的な例では、システムを仕様に合わせるよりも、システムを仕様に合わせるようにユーザーを説得する方がはるかに優れています。あなた自身がオフィスの相互運用に対処しなければなりません(これは基本的にあなた、そしておそらくあなたのユーザーに多くの苦痛をもたらすでしょう)。同様に、OpenOffice3では新しいフォーマットがサポートされていると思います。

この機能をシステムに追加できない状況があることはありがたいですが、上記のツールを追加すると、Office 2007を使用している人と古いものを使用している人の間の摩擦が減るため、ほとんどの場合、人々の生活が楽になります。バージョン。

于 2009-04-30T13:31:38.297 に答える
1

Microsoft.Office.Interop.Excel の使用を試すことができます。変換しようとしているマシンに Excel がインストールされている必要があります。[COM] タブから参照を追加し、Microsoft Excel 12.0 Object Library コンポーネントを使用できます。

基本的に、Workbook.Open() を使用して既存のワークブックを開き、新しいワークシートを作成して既存のデータをコピーします。その後、Workbook.SaveAs() メソッドを使用できます。これにより、2 番目のパラメーターでファイル形式を設定できます。

于 2009-04-30T13:17:27.397 に答える
0

これは、IBMiSeriesを使用した私のプロジェクトのコードです。すべてのExcelファイルをExcel2003に変換します。

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;    
}
于 2011-03-15T19:22:17.867 に答える
0

このコードを試してください:

        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();
于 2009-08-03T17:49:54.333 に答える