最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用NPOI實現(xiàn)將表格中數(shù)據(jù)導(dǎo)入Excel

 更新時間:2025年02月18日 10:16:38   作者:就是有點傻  
NPOI是.NET版本的POI,可以幫助我們在沒有安裝Microsoft Office的情況下讀寫Office文件,下面我們就來看看C#如何使用NPOI實現(xiàn)將表格中數(shù)據(jù)導(dǎo)入Excel吧

在C#中,使用NPOI庫將表格數(shù)據(jù)導(dǎo)入Excel的操作相對直接。NPOI是.NET版本的POI,可以幫助我們在沒有安裝Microsoft Office的情況下讀寫Office文件,如xls和xlsx。以下是使用NPOI將DataTable導(dǎo)出到Excel的基本步驟:

創(chuàng)建工作簿:首先,你需要創(chuàng)建一個IWorkbook對象,這是Excel文件的開始。

創(chuàng)建工作表:使用workbook.CreateSheet("Sheet1")創(chuàng)建一個新的工作表。

創(chuàng)建表頭:通過遍歷DataTable的列來創(chuàng)建Excel文件的表頭。

填充數(shù)據(jù):遍歷DataTable的每一行,并為每個單元格填充數(shù)據(jù)。

寫入文件:最后,將工作簿寫入到文件流中,保存為Excel文件。

下面是一個簡單的示例代碼,展示了如何將DataTable導(dǎo)出到Excel文件:

using NPOI.XSSF.UserModel; // 用于處理xlsx文件
using NPOI.HSSF.UserModel; // 用于處理xls文件
using System.Data;
using System.IO;
 
public void ExportToExcel(DataTable dt, string filePath)
{
    IWorkbook workbook;
    // 根據(jù)文件擴(kuò)展名選擇工作簿類型
    if (Path.GetExtension(filePath).Equals(".xlsx", StringComparison.OrdinalIgnoreCase))
    {
        workbook = new XSSFWorkbook();
    }
    else
    {
        workbook = new HSSFWorkbook();
    }
 
    ISheet sheet = workbook.CreateSheet("Sheet1");
 
    // 創(chuàng)建表頭
    IRow headerRow = sheet.CreateRow(0);
    for (int i = 0; i < dt.Columns.Count; i++)
    {
        headerRow.CreateCell(i).SetCellValue(dt.Columns[i].ColumnName);
    }
 
    // 填充數(shù)據(jù)
    for (int i = 0; i < dt.Rows.Count; i++)
    {
        IRow row = sheet.CreateRow(i + 1);
        for (int j = 0; j < dt.Columns.Count; j++)
        {
            row.CreateCell(j).SetCellValue(dt.Rows[i][j].ToString());
        }
    }
 
    // 寫入文件
    using (FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write))
    {
        workbook.Write(fileStream);
    }
}

在上述代碼中,我們首先檢查文件擴(kuò)展名來決定創(chuàng)建XSSFWorkbook(用于.xlsx文件)還是HSSFWorkbook(用于.xls文件)。然后,我們創(chuàng)建一個工作表,并填充表頭和數(shù)據(jù)。最后,我們將工作簿寫入到指定的文件路徑。

實際中第一步

 private void BtnDerive_Click(object sender, EventArgs e)
 {
     SaveFileDialog saveFileDialog = new SaveFileDialog();
     saveFileDialog.Filter = "Excel files (*.xlsx)|*.xlsx";
     saveFileDialog.Title = "選擇導(dǎo)出文件保存位置";
     saveFileDialog.FileName = GetFileName();
 
     if (saveFileDialog.ShowDialog() == DialogResult.OK)
     {
         Export(dataGridView1, saveFileDialog.FileName);
     }
 }
  private string GetFileName()
  {
      return $"產(chǎn)品類型表_{DateTime.Now:yyyyMMddHHmmss}.xlsx";
  }
 private void Export(DataGridView dgv, string fileName)
 {
     try
     {
         IWorkbook wb = new XSSFWorkbook();
         //NPOI 使用HSSFWorkbook 類來處理 xls,XSSFWorkbook 類來處理 xlsx。
         //它們都繼承接口 IWorkbook,通過 IWorkbook 來統(tǒng)一處理 xls 和 xlsx 格式的文件
         ISheet sheet = wb.CreateSheet();
         IRow row;
         //獲取DataGridView的列名,其中 i 表示低級列,i從0開始
         row = sheet.CreateRow(0);
         // 生成標(biāo)題,注意第一列是“操作”列,不處理
         for (int k = 1; k < dgv.Columns.Count; k++)
         {
             row.CreateCell(k - 1).SetCellValue(dgv.Columns[k].HeaderText.ToString());
         }
         for (int i = 0; i < dgv.Rows.Count; i++)
         {
             row = sheet.CreateRow(i + 1);
             for (int k = 1; k < dgv.Columns.Count; k++)
             {
                 string value = dgv.Rows[i].Cells[k].Value == null ? "" : dgv.Rows[i].Cells[k].Value.ToString();
                 row.CreateCell(k - 1).SetCellValue(value);
             }
         }
         using (var fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite))
         {
             wb.Write(fs); //寫入到Excel中
         }
         MessageBox.Show("保存成功,文件名:" + fileName, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
 }

c# 使用NPOI將DataTable 寫入Excel 中的數(shù)據(jù)類型轉(zhuǎn)換

方法一

using System;
using System.Data;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
 
public class ExcelWriter
{
    public static void WriteDataTableToExcel(DataTable dataTable, string filePath)
    {
        // 創(chuàng)建一個新的工作簿
        IWorkbook workbook = new XSSFWorkbook();
        // 創(chuàng)建一個工作表
        ISheet sheet = workbook.CreateSheet("Sheet1");
 
        // 創(chuàng)建標(biāo)題行
        IRow headerRow = sheet.CreateRow(0);
        for (int i = 0; i < dataTable.Columns.Count; i++)
        {
            headerRow.CreateCell(i).SetCellValue(dataTable.Columns[i].ColumnName);
        }
 
        // 填充數(shù)據(jù)行
        int rowIndex = 1;
        foreach (DataRow row in dataTable.Rows)
        {
            IRow dataRow = sheet.CreateRow(rowIndex++);
            for (int i = 0; i < dataTable.Columns.Count; i++)
            {
                DataColumn column = dataTable.Columns[i];
                ICell cell = dataRow.CreateCell(i);
 
                switch (column.DataType.Name.ToLower())
                {
                    case "string":
                        cell.SetCellValue(row[i].ToString());
                        break;
                    case "int32":
                    case "int64":
                        cell.SetCellValue(Convert.ToInt32(row[i]));
                        break;
                    case "double":
                        cell.SetCellValue(Convert.ToDouble(row[i]));
                        break;
                    case "datetime":
                        cell.SetCellValue(Convert.ToDateTime(row[i]));
                        break;
                    case "boolean":
                        cell.SetCellValue(Convert.ToBoolean(row[i]));
                        break;
                    default:
                        cell.SetCellValue(row[i].ToString());
                        break;
                }
            }
        }
 
        // 將工作簿寫入文件
        using (var fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
        {
            workbook.Write(fs);
        }
    }
}

方法二

public static void CreateSheet(IWorkbook workbook, DataTable dt, int num)
{
    ISheet sheet = string.IsNullOrEmpty(dt.TableName) ? workbook.CreateSheet("Sheet" + num) : workbook.CreateSheet(dt.TableName);
 
    ICellStyle style = workbook.CreateCellStyle();//設(shè)置表格樣式
    style.BorderBottom = BorderStyle.Thin;//下邊框線(給表格加入背景顏色后,就會覆蓋原來的邊框,直接設(shè)置邊框樣式可以解決這一問題)
    style.BorderLeft = BorderStyle.Thin; //左邊框線
    style.BorderRight = BorderStyle.Thin;//右邊框線
    style.BorderTop = BorderStyle.Thin;//上邊框線
 
    sheet.PrintSetup.PaperSize = 9;//A4紙張打印
    sheet.PrintSetup.Landscape = true;//橫向打?。J(rèn)為false即豎向)
 
    //設(shè)置自動調(diào)整為一頁寬度
    sheet.Autobreaks = false;//必須設(shè)置
    sheet.FitToPage = true; //一頁寬   
    sheet.PrintSetup.FitWidth = 1;
    sheet.PrintSetup.FitHeight = short.MaxValue;
 
    //表頭  
    IRow row = sheet.CreateRow(0);
    for (int i = 0; i < dt.Columns.Count; i++)
    {
        ICell cell = row.CreateCell(i);
        cell.SetCellValue(dt.Columns[i].ColumnName);
        cell.CellStyle = style;
    }
 
    //數(shù)據(jù)  
    for (int i = 0; i < dt.Rows.Count; i++)
    {
        IRow row1 = sheet.CreateRow(i + 1);
        for (int j = 0; j < dt.Columns.Count; j++)
        {
            ICell cell = row1.CreateCell(j);
            cell.CellStyle = style;
 
            if (dt.Columns[j].DataType.Equals(typeof(bool)) && bool.TryParse(dt.Rows[i][j].ToString(), out bool b))
            {
                cell.SetCellValue(b);
            }
            else if (double.TryParse(dt.Rows[i][j].ToString(), out double d))//數(shù)字格式
            {
                cell.SetCellValue(d);
            }
            else
            {
                cell.SetCellValue(dt.Rows[i][j].ToString());
            }
        }
    }
 
    for (int columnIndex = 0; columnIndex < dt.Rows.Count; columnIndex++)
    {
        sheet.AutoSizeColumn(columnIndex); //列寬自適應(yīng)
    }
 
}

到此這篇關(guān)于C#使用NPOI實現(xiàn)將表格中數(shù)據(jù)導(dǎo)入Excel的文章就介紹到這了,更多相關(guān)C# NPOI數(shù)據(jù)導(dǎo)入Excel內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#實現(xiàn)掃描槍掃描二維碼并打印(實例代碼)

    C#實現(xiàn)掃描槍掃描二維碼并打印(實例代碼)

    這篇文章主要介紹了C#實現(xiàn)掃描槍掃描二維碼并打印,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • C++調(diào)用C#的DLL程序?qū)崿F(xiàn)方法

    C++調(diào)用C#的DLL程序?qū)崿F(xiàn)方法

    本文通過例子,講述了C++調(diào)用C#的DLL程序的方法,作出了以下總結(jié),具有一定的參考價值,下面就讓我們一起來學(xué)習(xí)吧
    2015-10-10
  • Unity制作自定義字體的兩種方法

    Unity制作自定義字體的兩種方法

    這篇文章主要為大家詳細(xì)介紹了Unity制作自定義字體的兩種方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C#使用Spire.Doc?for?.NET實現(xiàn)Word首頁面頁眉頁腳不同設(shè)置指南

    C#使用Spire.Doc?for?.NET實現(xiàn)Word首頁面頁眉頁腳不同設(shè)置指南

    在遠(yuǎn)程辦公時代,C#?Word文檔自動化需求激增,然而開發(fā)者常遇痛點:手動調(diào)整不同的Word首頁頁眉頁腳繁瑣,耗時長,且Interop依賴Office環(huán)境,部署難、跨平臺弱,因此本文給大家介紹了C#使用Spire.Doc?for?.NET實現(xiàn)Word首頁面眉頁腳不同設(shè)置指南,需要的朋友可以參考下
    2026-03-03
  • C#中多種高效定時器方法的使用詳解

    C#中多種高效定時器方法的使用詳解

    本文主要介紹了C#中多種高效定時器方法的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • C# 特性AttributeUsage簡介與使用教程

    C# 特性AttributeUsage簡介與使用教程

    這篇文章主要介紹了C# 特性AttributeUsage簡介與使用教程,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • C#從字符串中指定位置移除子字符串的方法

    C#從字符串中指定位置移除子字符串的方法

    這篇文章主要介紹了C#從字符串中指定位置移除子字符串的方法,涉及C#中Remove方法的使用技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • 深入理解C#序列化與反序列化的詳解

    深入理解C#序列化與反序列化的詳解

    本篇文章是對C#中序列化與反序列化進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • c#獲取相同概率隨機(jī)數(shù)的算法代碼

    c#獲取相同概率隨機(jī)數(shù)的算法代碼

    這篇文章主要介紹了c#獲取相同概率隨機(jī)數(shù)的算法代碼,有需要的朋友可以參考一下
    2014-01-01
  • C#實戰(zhàn)之備忘錄的制作詳解

    C#實戰(zhàn)之備忘錄的制作詳解

    這篇文章主要為大家介紹了如何利用C#制作一個備忘錄,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以學(xué)習(xí)一下
    2022-02-02

最新評論

垦利县| 新邵县| 凤冈县| 湖南省| 曲水县| 高要市| 云霄县| 仁布县| 新沂市| 武汉市| 新营市| 玛多县| 淮南市| 武汉市| 沅陵县| 无为县| 晋宁县| 蓬溪县| 鄢陵县| 阜阳市| 宁武县| 大名县| 泌阳县| 克山县| 讷河市| 思南县| 石首市| 平谷区| 海晏县| 寿宁县| 邯郸县| 峨眉山市| 綦江县| 乌拉特前旗| 赫章县| 隆回县| 大连市| 翁源县| 天津市| 叙永县| 哈密市|