Как создать файл Excel с листами в C #? - PullRequest
1 голос
/ 07 октября 2009

Я хочу создать файл Excel, скажем, personinfo.xls с одним рабочим листом, скажем, Персона .

Есть ли способ в C # сделать это?

Ответы [ 5 ]

3 голосов
/ 07 октября 2009

Вы можете сделать это с помощью MyXLS .

Я использовал его в нескольких проектах с большим успехом.

Это с открытым исходным кодом.

2 голосов
/ 07 октября 2009

Попробуйте этот класс:

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using Excel = Microsoft.Office.Interop.Excel;
using System.Reflection;
using System.Threading;
using System.Diagnostics;
using System.Drawing;
using System.Windows.Forms;
using System.Xml;
using System.Data.SqlClient;

namespace ExcelDemo
{
    static class ExcelImportExport
    {
        public static void ExportToExcel(string strFileName, string strSheetName)
        {
            // Run the garbage collector
            GC.Collect();

            // Delete the file if it already exists
            if (System.IO.File.Exists(strFileName))
            {
                System.IO.File.SetAttributes(strFileName, FileAttributes.Normal);
                System.IO.File.Delete(strFileName);
            }

            // Open an instance of excel. Create a new workbook.
            // A workbook by default has three sheets, so if you just want a single one, delete sheet 2 and 3
            Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
            Excel._Workbook xlWB = (Excel._Workbook)xlApp.Workbooks.Add(Missing.Value);
            Excel._Worksheet xlSheet = (Excel._Worksheet)xlWB.Sheets[1];
            ((Excel._Worksheet)xlWB.Sheets[2]).Delete();
            ((Excel._Worksheet)xlWB.Sheets[2]).Delete();

            xlSheet.Name = strSheetName;
            // Write a value into A1
            xlSheet.Cells[1, 1] = "Some value";

            // Tell Excel to save your spreadsheet
            xlWB.SaveAs(strFileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
            xlApp.Quit();

            // Release the COM object, set the Excel variables to Null, and tell the Garbage Collector to do its thing
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWB);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);

            xlSheet = null;
            xlWB = null;
            xlApp = null;

            GC.Collect();

        }


    }

}
2 голосов
/ 07 октября 2009

Вы пробовали Excel Interop? Это для Excel 2003/2007? Если это Excel 2007 xml, вы можете попробовать

Carlos

SpreadsheetGear

ExcelPackage (Codeplex)

1 голос
/ 15 октября 2009

Если вам нужна совместимость только с Excel 2007 или более поздней версией, я бы выбрал OpenXML SDK .

Ознакомьтесь с последним сообщением первой страницы этой темы для очень простого примера.

SpreadsheetML вначале может быть довольно запутанным, но если вам приходится регулярно создавать офисные документы, его действительно стоит изучить. Вы можете найти ресурсы на openxmldeveloper.org

С наилучшими пожеланиями
Оливер Ханаппи

0 голосов
/ 07 октября 2009

SpreadsheetGear for .NET сделает это со следующим кодом:

            // Create a new empty workbook with one worksheet.
            IWorkbook workbook = Factory.GetWorkbook();
            // Get the worksheet and change it's name to "Person".
            IWorksheet worksheet = workbook.Worksheets[0];
            worksheet.Name = "Person";
            // Put "Hello World!" into A1.
            worksheet.Cells["A1"].Value = "Hello World!";
            // Save the workbook as xls (Excel 97-2003 / Biff8).
            workbook.SaveAs(@"C:\tmp\personinfo.xls", FileFormat.Excel8);
            // Save the workbook as xlsx (Excel 2007 Open XML).
            workbook.SaveAs(@"C:\tmp\personinfo.xlsx", FileFormat.OpenXMLWorkbook);

Вы можете скачать бесплатную пробную версию здесь , если хотите попробовать сами.

Отказ от ответственности: я владею SpreadsheetGear LLC

...