其实昨天也分享过,但是,上篇笔记主要是 记录了添加组件,添加名称空间。
今天终于把数据通过代码写到了Excel表格中啦
----------向Excel中写入数据
新建一个windows窗口应用程序。
1,当然是要添加对应的引用,选择合适自己的版本。
2, 添加完引用后,就可以添加名称空间啦
using System.Diagnostics;3,添加一个按钮,双击进入按钮的被单击事件函数中写上下面的代码:
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;
private void openBtn_Click(object sender, EventArgs e)-------------- 上面的代码中,关键是对指定单元格数据的写入。操作的单元格的行列索引不是从0开始,是从1开始的。请注意!!!-----------------------
{
try
{
///---检查当前系统中是否存在已经启动的Excel进程
initailExcel();
Excel.Workbook book = null;
///--指定工作表名
Excel.Worksheet sheet = null;
///--文件地址
string filepath = System.Windows.Forms.Application.StartupPath + "\\1.xlsx";//@"C:\Users\driver\Desktop\WindowsFormsApplication3\WindowsFormsApplication3\1.xlsx";
//---实例化excel对象
Excel.Application excel = new Excel.Application();
///---设置不可见
excel.Visible = false;
//---指定存在的excel,参数为路径名
book = excel.Application.Workbooks.Open(filepath , Missing.Value,Missing.Value,Missing.Value,Missing.Value
,Missing.Value,Missing.Value,Missing.Value,Missing.Value
,Missing.Value,Missing.Value,Missing.Value,Missing.Value);
//---获取当前需要操作的sheet
sheet = (Excel.Worksheet)book.Sheets["Sheet1"];
///---写入数据
///---这里操作EXcel单元格,单元格的行列索引不是从0开始的,是从1开始的,
///---向第三行第二列的单元格添加数据
sheet.Cells[3, 2] = 1.0;
///---向第三行第三列的单元格添加数据
sheet.Cells[3, 3] = "晓帅歌";
//---保存数据
//book.SaveAs(filepath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
book.Save();
sheet = null;
book = null;
excel.Quit();
excel = null;
///---回收资源
GC.Collect();
///---提示成功
MessageBox.Show("保存成功");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
上面的代码中调用了一个函数, initailExcel,用来检查当前系统中是否存在 ExCel进程。我也是从 该博客笔记学到的。,源码如下:
Excel.Application _Excel = null;可以打开看看,是否将数据写入到Excel中。
///---判断是否启动了excel
void initailExcel()
{
//檢查PC有無Excel在執行
bool flag = false;
foreach (var item in Process.GetProcesses())
{
if (item.ProcessName == "EXCEL")
{
flag = true;
break;
}
}
if (!flag)
{
this._Excel = new Excel.Application();
}
else
{
object obj = Marshal.GetActiveObject("Excel.Application");//引用已在執行的Excel
_Excel = obj as Excel.Application;
}
this._Excel.Visible = true;//設false效能會比較好
}
-------- 我的问题
实现过程中,会弹出Excel窗口,虽然窗口上什么都没有。我也设置了Excel.Visible =false。但是没效果。不知道什么原因。
-----------------读取Excel中的数据
读取表中的值的方法与写入表中的值的方法是类似的。新添加一个按钮,双击进入其被单击事件函数,如下代码:
//----获取数据
private void getBtn_Click(object sender, EventArgs e)
{
try
{
string filepath = System.Windows.Forms.Application.StartupPath + "\\1.xlsx";//@"C:\Users\driver\Desktop\WindowsFormsApplication3\WindowsFormsApplication3\1.xlsx";
//---实例化excel对象
Excel.Application excel = new Excel.Application();
///---设置不可见
excel.Visible = false;
Excel.Workbook book = null;
///--指定工作表名
Excel.Worksheet sheet = null;
//---指定存在的excel,参数为路径名
book = excel.Application.Workbooks.Open(filepath, Missing.Value, Missing.Value, Missing.Value, Missing.Value
, Missing.Value, Missing.Value, Missing.Value, Missing.Value
, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
//---获取当前需要操作的sheet
sheet = (Excel.Worksheet)book.Sheets["Sheet1"];
///---读取EXcel单元格的值
///---这里是获取固定位置上的值
///---这里获取的是 行索引为 1列 索引为1的单元格的值
Range range = (Excel.Range)sheet.Cells[1,1];
///---显示获取的值
textBox1.Text = range.Text;
//---保存数据
//book.SaveAs(filepath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
book.Save();
//---关闭打开的表
book.Close();
sheet = null;
book = null;
excel.Quit();
excel = null;
///---回收系统资源
GC.Collect();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
-----获取值结果
这里我用TextBox来显示获取到的值。,结果如下图:
------------提 示-------------
上面的代码太多,可能关键的东西还是没说清楚。我是为了完整列出我操作时候的代码。
1,向Excel中写入数据,关键代码:
///---写入数据2,读取指定位置的代码并显示
///---这里操作EXcel单元格,单元格的行列索引不是从0开始的,是从1开始的,
///---向第三行第二列的单元格添加数据
sheet.Cells[3, 2] = 1.0;
///---向第三行第三列的单元格添加数据
sheet.Cells[3, 3] = "晓帅歌";
///---读取EXcel单元格的值3,这里注意,在Excel下有个Allication的属性,而Windows窗体也有个属性Application,请在使用的时候,注明所使用的名称空间下的Application。
///---这里是获取固定位置上的值
///---这里获取的是 行索引为 1列 索引为1的单元格的值
Range range = (Excel.Range)sheet.Cells[1,1];
///---显示获取的值
textBox1.Text = range.Text;
-----------------感谢
昨晚弄了一晚上这个了,说真的,当时真的感觉相当难,不知道遇到的问题怎么解决,无从下手。今天早上冷静下来了,分析了下,重新确定了突破C#操作Excel的方向。效果就出来了。再次告诫自己,遇到问题要冷静分析,不要因为做不出来,解决不了当前的问题就放弃。要自信,相信自己。就像睿哥那样的自信。
再次感谢睿哥。