2

複数のクライアントが接続するサーバーを作成し、16 進データをサーバーに送信します。データはサーバーによって処理され、このデータを Excel シートに保存したいと考えています。私は次のコードを使用していますが、これは毎回Excelファイルを開き、データを書き込んで閉じます。また、Excel ファイルは既に存在している必要があります。

public class CreateExcelDoc
{

    private static Excel.Workbook workbook = null;

    private static Excel.Worksheet worksheet = null;
    private static Excel.Range workSheet_range = null;
    private static Excel.Application app = new Excel.Application();
private static Excel.Workbooks workbooks = app.Workbooks;
    public static void createDoc()
    {
        object misValue = System.Reflection.Missing.Value;
        try
        {
            workbook = workbooks.Open("C:\\Documents and Settings\\pratyush\\Desktop\\test.xlsx", misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue);


            app.Visible = true;
            worksheet = (Excel.Worksheet)workbook.Sheets[1];


        }
        catch (Exception e)
        {
            Console.Write("Error");
        }
        finally
        {

        }
    }

    public static void createHeaders(int row, int col, string htext, string cell1, string cell2, int mergeColumns, string b, bool font, int size, string fcolor)
    {
        worksheet.Cells[row, col] = htext;
        workSheet_range = worksheet.get_Range(cell1, cell2);
        workSheet_range.Merge(mergeColumns);
        switch (b)
        {
            case "YELLOW":
                workSheet_range.Interior.Color = System.Drawing.Color.Yellow.ToArgb();
                break;
            case "GRAY":
                workSheet_range.Interior.Color = System.Drawing.Color.Gray.ToArgb();
                break;
            case "GAINSBORO":
                workSheet_range.Interior.Color = System.Drawing.Color.Gainsboro.ToArgb();
                break;
            case "Turquoise":
                workSheet_range.Interior.Color = System.Drawing.Color.Turquoise.ToArgb();
                break;
            case "PeachPuff":
                workSheet_range.Interior.Color = System.Drawing.Color.PeachPuff.ToArgb();
                break;
            default:
                //  workSheet_range.Interior.Color = System.Drawing.Color..ToArgb();
                break;

        }

        workSheet_range.Borders.Color = System.Drawing.Color.Black.ToArgb();
        workSheet_range.Font.Bold = font;
        workSheet_range.ColumnWidth = size;
        if (fcolor.Equals(""))
        {
            workSheet_range.Font.Color = System.Drawing.Color.White.ToArgb();
        }
        else
        {
            workSheet_range.Font.Color = System.Drawing.Color.Black.ToArgb();
        }

    }
    public static void addData(int row, int col, string data, string cell1, string cell2, string format)
    {
        worksheet.Cells[row, col] = data;
        workSheet_range = worksheet.get_Range(cell1, cell2);
        workSheet_range.Borders.Color = System.Drawing.Color.Black.ToArgb();
        workSheet_range.NumberFormat = format;
    }

    public static void adddata()
    {
        createDoc();

        //creates the main header
        createHeaders(5, 2, "Total of Products", "B5", "D5", 2, "YELLOW", true, 10, "n");
        //creates subheaders
        createHeaders(6, 2, "Sold Product", "B6", "B6", 0, "GRAY", true, 10, "");


        //add Data to to cells
        addData(7, 2, "114287", "B7", "B7", "#,##0");


        workbook.Close(true, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
        app.Quit();


    }

    public static void Main()
    {
        adddata();
    }
}
}

私が望むのは、サーバーがクライアントIPアドレスという名前の新しいExcelファイルを静かに作成し、サーバーによって処理された後にデータを追加して静かに保存することです。現在、私のコードは毎回ファイルを開き、データをExcelファイルに保存してから閉じるため、これをどのように達成できますか。

4

1 に答える 1

2

EPPlus を使用できます。無料で Interop よりも効率的です。

ファイルがすでに存在する場合は削除し、新しいファイルを作成して、必要なことを行います。

FileInfo newFile = new FileInfo(fileName);
if (newFile.Exists)
 File.Delete(fileName);
ExcelPackage pck = new ExcelPackage(newFile);
..... //work with worksheets
pck.Save();

EPPlus Web サイトで完全なサンプルを見つけることができます。

于 2013-08-23T09:10:37.670 に答える