Sök…


Introduktion

Det är .NET-version av POI Java-projekt. det tillåter att läsa / skriva xls, doc, ppt-filer utan Microsoft Office installerat. Detaljer om dokumentation finns här: https://github.com/tonyqus/npoi

Installera NPOI

Det bästa sättet att inkludera alla bibliotek relaterade till NPOI är NUGet Package Manager. Sök efter NPOI i NUGet-paketets hanteringsfönster.

ange bildbeskrivning här

När det väl har installerats kommer allt nödvändigt bibliotek att visas i referensavsnittet i ditt nuvarande projekt ange bildbeskrivning här

Inkludera sedan NPOI i din fil så här

using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.XSSF.UserModel

Skapa en Excel-fil

MemoryStream excelMS =  GetExcelFile();
 
 //Using Resposne Stream to Make File Available for User to Download;
 Response.Clear();
 Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
 Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", @"Excel_" + DateTime.Now.ToString("yyyy-dd-M-HH-mm") + ".xlsx"));

 Response.BinaryWrite(excelMS.ToArray());
 Response.End();

var försiktig när du använder MIME-typ. Du måste välja olika MIME-typer för olika filformat. För EX xltm-förlängning kommer det att vara "application / vnd.ms-excel.template.macroEnabled.12"; xlxs förlängning kommer det att vara "application / vnd.openxmlformats-officedocument.spreadsheetml.sheet"; Olika MIME-typer som stöds MS finns på den här länken .

public MemoryStream GetExcelFile()
{
    //Excel File Stream 
    MemoryStream ms = null;
    // create workbook
    XSSFWorkbook workbook = new XSSFWorkbook();
    // the table named mySheet
    //Assigning New Sheet Name /
    XSSFSheet sheet = (XSSFSheet)workbook.CreateSheet("WorkSheet");
       
    // Assuming FreezePaneRow  = 10, FreezePaneColumn = 11 in the config file
    int freezeRow = Convert.ToInt32(ConfigurationManager.AppSettings["FreezePaneRow"]);
    int freezeCol = Convert.ToInt32(ConfigurationManager.AppSettings["FreezePaneCol"]);
    try
    {
        // Freeze Created Excel Sheet Row;
            sheet.CreateFreezePane(freezeCol, freezeRow, freezeCol, freezeRow);
        //Freezing only the Header Row;
            sheet.CreateFreezePane(0, 1);

         using (ms = new MemoryStream())
            {
                logger.Info("Using Memory Stream to Create New WorkBook");
                workbook.Write(ms); // Write to memory stream for download through browser     
            }
    }
    catch (Exception Ex)
    { ... }
    return ms;
}

Läser en Excel-fil

Det finns olika sätt att läsa en Excel-fil. Jag ska ge ett exempel med filvägsparametern. Du kan få olika sätt att läsa en fil på det här inlägget.

public void ReadExcel(string path)
        {
            // Write data in workbook from xls document.
            XSSFWorkbook workbook = new XSSFWorkbook(path);
            // Read the current table data
            XSSFSheet sheet = (XSSFSheet)workbook.GetSheetAt(0);
            // Read the current row data
            XSSFRow headerRow = (XSSFRow)sheet.GetRow(0);
            // LastCellNum is the number of cells of current rows
            int cellCount = headerRow.LastCellNum;
            DataTable dt = new DataTable();
            bool isBlanKRow = false;

            try
            {
                if (dt.Rows.Count == 0)
                {
                    //Reading First Row as Header for Excel Sheet;
                    try
                    {
                        for (int j = headerRow.FirstCellNum; j < cellCount; j++)
                        {
                            // get data as the column header of DataTable
                            DataColumn column = new DataColumn(headerRow.GetCell(j).StringCellValue);
                            dt.Columns.Add(column);
                        }
                    }
                    catch (Exception Ex)
                    { }
                }

                for (int sheetindex = 0; sheetindex < workbook.NumberOfSheets; sheetindex++)
                {
                    sheet = (XSSFSheet)workbook.GetSheetAt(sheetindex);
                    if (null != sheet)
                    {
                        // LastRowNum is the number of rows of current table
                        int rowCount = sheet.LastRowNum + 1;
                        //Reading Rows and Copying it to Data Table;
                        try
                        {
                            for (int i = (sheet.FirstRowNum + 1); i < rowCount; i++)
                            {
                                XSSFRow row = (XSSFRow)sheet.GetRow(i);
                                DataRow dataRow = dt.NewRow();
                                isBlanKRow = true;
                                try
                                {
                                    for (int j = row.FirstCellNum; j < cellCount; j++)
                                    {
                                        if (null != row.GetCell(j) && !string.IsNullOrEmpty(row.GetCell(j).ToString()) && !string.IsNullOrWhiteSpace(row.GetCell(j).ToString()))
                                        {
                                            dataRow[j] = row.GetCell(j).ToString();
                                            isBlanKRow = false;
                                        }

                                    }
                                }
                                catch (Exception Ex)
                                { }
                                if (!isBlanKRow)
                                {
                                    dt.Rows.Add(dataRow);
                                }
                            }
                        }
                        catch (Exception Ex)
                        { }
                    }
                }
            }
            catch (Exception Ex)
            { }
            finally
            {
                workbook.UnlockStructure();
                workbook.UnlockRevision();
                workbook.UnlockWindows();
                workbook = null;
                sheet = null;
            }
        }


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow