用C#将数据写入到Excel指定的单元格中

本文介绍如何使用C#与Excel进行数据交互,包括打开现有Excel文件、读取特定单元格的内容,并根据内容从DataSet中选择相关数据行,最后保存更改。
  1. 在使用用本文的方法前,需要先安装Office 的Excel程序,然后,引用 Excel 的对象包装:
  1. using Microsoft.Office.Interop.Excel;

 

不同的Office版本可能引用的名称不同。

使用下面的代码,完成数据写入操作:

  1.  private void writeData(string excelFileName,DataSet dsResult,)
  2.         {
  3.             _Application xlApp = null;
  4.             _Workbook xlWorkbook = null;
  5.             _Worksheet xlWorksheet = null;
  6.             
  7.             
  8.             System.Reflection.Missing missing = System.Reflection.Missing.Value;
  9.             string saveAsPath = "";
  10.             try
  11.             {
  12.                 xlApp = new ApplicationClass();
  13.                 xlApp.Visible =true ;
  14.                 xlWorkbook=xlApp.Workbooks.Open(excelFileName, missing, missing, missing, missing, missing, missing, missing, 
  15.                     missing, missing, missing, missing, missing, missing, missing);
  16.                 xlWorksheet = xlWorkbook.Worksheets[1] as _Worksheet;
  17.                 //xlWorksheet.Name = "NewWorksheet";
  18.                 //xlWorksheet.Cells[1, "A"] = "Topic: ";
  19.                 //xlWorksheet.Cells[1, "B"] = ".Net Interop Excel Demo";
  20.                 for (int x = 4; x < 92; x++)
  21.                 {
  22.                     object rang = xlWorksheet.Cells[x, "D"];
  23.                     if (rang != null)
  24.                     {
  25.                         object objText = ((Range)rang).Value2;
  26.                         string strCellText = objText==null?"":objText.ToString();
  27.                         if (strCellText == "")
  28.                         {
  29.                             rang = xlWorksheet.Cells[x, "C"];
  30.                             strCellText = "";
  31.                             if (rang != null)
  32.                             {
  33.                                 objText = ((Range)rang).Value2;
  34.                                 strCellText = objText == null ? "" : objText.ToString();
  35.                             }
  36.                             
  37.                         }
  38.                         //xlWorksheet.Cells[x, "E"] = strCellText;
  39.                         DataRow[] rows = dsResult.Tables[0].Select("Name='" + strCellText + "'");
  40.                        if (rows.Length > 0)
  41.                        {
  42.                            //防止有空值
  43.                            if(rows[0]["Count"]!=DBNull.Value )
  44.                             xlWorksheet.Cells[x, "H"] = rows[0]["Count"].ToString();
  45.                                                  }
  46.                     }
  47.                     
  48.                 }
  49.                 
  50.                 
  51.                 
  52.                 
  53.                 xlWorkbook.Save();
  54.                 //saveAsPath = System.Windows.Forms.Application.StartupPath + "//" + xlWorkbook.Name;
  55.                 //xlWorkbook.SaveAs(saveAsPath, missing, missing, missing, missing,
  56.                 //    missing, XlSaveAsAccessMode.xlShared, missing, missing, missing,
  57.                 //    missing, missing);
  58.                 //xlApp.Quit();
  59.             }
  60.             catch (Exception ex)
  61.             {
  62.                 MessageBox.Show(ex.Message);
  63.             }
  64.             finally
  65.             {
  66.                 //System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
  67.                 //xlApp = null;
  68.                 //GC.Collect();
  69.             }
  70.         }

本例没有直接关闭文件,如果你要另存为一个文件,把注释取消即可。

注意获取单元格的方法:

 

 

  1.  rang = xlWorksheet.Cells[x, "C"];
  2.                             strCellText = "";
  3.                             if (rang != null)
  4.                             {
  5.                                 objText = ((Range)rang).Value2;
  6.                                 strCellText = objText == null ? "" : objText.ToString();
  7.                             }

 

 

 

 

C# 中,可以通过 `ClosedXML` 库实现将 `TextBox` 控件中的数据写入 Excel 模板的指定单元格,并将文件另存为新文件的功能。此方法不依赖 Microsoft Excel 的安装,适用于服务端或无图形界面环境[^1]。 ### 读取 Excel 模板并写入指定单元格 在 WinForm 应用程序中,首先需要加载 Excel 模板文件,然后定位到指定的工作表和单元格,并将 `TextBox` 中的内容写入单元格。最后将文件另存为新文件,以避免修改原始模板。 以下是一个完整的代码示例: ```csharp using ClosedXML.Excel; private void button1_Click(object sender, EventArgs e) { string templatePath = @"C:\Templates\template.xlsx"; // Excel 模板路径 string folderPath = @"C:\ExcelOutput"; // 新文件保存路径 string fileName = "output"; string timeStamp = DateTime.Now.ToString("yyyyMMddHHmmss"); string newFilePath = Path.Combine(folderPath, $"{fileName}_{timeStamp}.xlsx"); using (var workbook = new XLWorkbook(templatePath)) // 加载模板 { var worksheet = workbook.Worksheet("Sheet1"); // 选择工作表 int row = 2; // 指定行号 int column = 3; // 指定列号 string value = textBox1.Text; // 获取 TextBox 中的内容 worksheet.Cell(row, column).Value = value; // 写入指定单元格 if (!Directory.Exists(folderPath)) { Directory.CreateDirectory(folderPath); } workbook.SaveAs(newFilePath); // 保存为新文件 } } ``` ### 关键点说明 - **加载模板**:使用 `XLWorkbook` 的构造函数加载 Excel 模板文件,确保保留原有格式和结构[^1]。 - **定位单元格**:通过 `worksheet.Cell(row, column).Value` 方法写入数据指定单元格。 - **保存为新文件**:使用 `workbook.SaveAs()` 方法将修改后的内容保存为新文件,避免对原始模板造成影响[^1]。 - **路径处理**:确保输出路径存在,若不存在则通过 `Directory.CreateDirectory()` 创建新目录。 --- ### 注意事项 - Excel 模板文件应为 `.xlsx` 格式,`ClosedXML` 不支持 `.xls` 格式[^1]。 - 若模板中包含多个工作表,需明确指定目标工作表名称或索引。 - 文件路径应确保程序具有读权限,避免因权限问题导致加载或保存失败。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值