0

XLS(古いExcelファイル)にデータを保存する機能をアプリケーションに追加したいと思います。

ここでASP.NETでこれを行う方法の例を見てきましたが、これがデスクトップアプリケーションのc#コードにどのように変換されるのかわかりません。

また、次のようなExcelの自動化も確認しました。

private void button1_Click(object sender, EventArgs e)
{
    Excel.Application xlApp ;
    Excel.Workbook xlWorkBook ;
    Excel.Worksheet xlWorkSheet ;
    object misValue = System.Reflection.Missing.Value;

    xlApp = new Excel.ApplicationClass();
    xlWorkBook = xlApp.Workbooks.Add(misValue);

    xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
    xlWorkSheet.Cells[1, 1] = "http://csharp.net-informations.com";

    xlWorkBook.SaveAs("csharp-Excel.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
    xlWorkBook.Close(true, misValue, misValue);
    xlApp.Quit();

    releaseObject(xlWorkSheet);
    releaseObject(xlWorkBook);
    releaseObject(xlApp);

    MessageBox.Show("Excel file created , you can find the file c:\\csharp-Excel.xls");
}

private void releaseObject(object obj)
{
    try
    {
        System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
        obj = null;
    }
    catch (Exception ex)
    {
        obj = null;
        MessageBox.Show("Exception Occured while releasing object " + ex.ToString());
    }
    finally
    {
        GC.Collect();
    }
}

そして、私はそれを使いたくありません:

  1. 大量のデータをエクスポートすると、非常に遅くなります

  2. 可能であれば、MicrosoftExcelがインストールされていないPCでこれを機能させたい

また、 CarlosAg.Excel.Xmlを試しましたが、ファイルを開いているときに、ファイルがXLS形式ではなく、他の形式であるというExcelからの警告が表示されることを除いて、機能しているようです。

誰かが私にこれを行う無料のc#ライブラリを勧めたり、従来の.Netライブラリを使用してデータをXLSに保存する方法を教えてもらえますか?

4

2 に答える 2

1

で利用可能なNOPIを使用しますcodeplex.com

このプロジェクトは、http://poi.apache.org/にあるPOIJavaプロジェクトの.NETバージョン です。POIは、xls、doc、pptファイルの読み取り/書き込みに役立つオープンソースプロジェクトです。幅広い用途があります。

NOPIの使用方法の例を次に示します。

        using (FileStream fileOut = new FileStream("poi-test.xls", FileMode.OpenOrCreate))
        {
            HSSFWorkbook workbook = new HSSFWorkbook();
            var worksheet = workbook.CreateSheet("POI Worksheet");

            // index from 0,0... cell A1 is cell(0,0)
            var row1 = worksheet.CreateRow((short)0);

            var cellA1 = row1.CreateCell((short)0);
            cellA1.SetCellValue("Hello");
            ICellStyle cellStyle = workbook.CreateCellStyle();
            cellStyle.FillForegroundColor = HSSFColor.GOLD.index;
            cellStyle.FillPattern = FillPatternType.SOLID_FOREGROUND;//.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
            cellA1.CellStyle = cellStyle;

            ICell cellB1 = row1.CreateCell((short)1);
            cellB1.SetCellValue("Goodbye");
            cellStyle = workbook.CreateCellStyle();
            cellStyle.FillForegroundColor = HSSFColor.LIGHT_CORNFLOWER_BLUE.index;
            cellStyle.FillPattern = FillPatternType.SOLID_FOREGROUND;
            cellB1.CellStyle = cellStyle;

            var cellC1 = row1.CreateCell((short)2);
            cellC1.SetCellValue(true);

            var cellD1 = row1.CreateCell((short)3);
            cellD1.SetCellValue(new DateTime());
            cellStyle = workbook.CreateCellStyle();
            cellStyle.DataFormat = HSSFDataFormat
                    .GetBuiltinFormat("m/d/yy h:mm");
            cellD1.CellStyle = cellStyle;

            workbook.Write(fileOut);
        }

参照: Leniel MacaferiによるC#でのExcelスプレッドシート.XLSおよび.XLSXの作成 

于 2012-05-28T14:17:34.780 に答える
0

別のアプローチは、CSV(コンマ区切り値)ファイルとしてエクスポートすることです。これは、データを含む単なるテキストファイルです。Excelがインストールされている場合、CSVファイルのデフォルトのアプリケーションであることが多く、サードパーティのライブラリは必要ありません。

于 2012-05-28T14:22:27.573 に答える