前言
以下内容为工作学习时的记录总结
参考博客来源:https://blog.csdn.net/qq_30507287/article/details/53856267
一、添加引用
添加相应dll的引用,然后在程序中添加如下命名空间。
using Microsoft.Office.Interop.Excel;
二、具体代码
1.自定义Student类
代码如下:
public class Student
{
private string id;
public string Id { get { return id; } set { id = value; } }
private string name;
public string Name { get { return name; } set { name = value; } }
private string age;
public string Age { get { return age; } set { age = value; } }
}
2.用反射获取类型的所有属性
用于后续生成所有Column的标题
代码如下:
private PropertyInfo[] GetPropertyInfoArray()
{
PropertyInfo[] props = null;
try
{
Type type = typeof(Student);
object obj = Activator.CreateInstance(type);
props = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
}
catch (Exception ex)
{ }
return props;
}
3.生成Excel文件
代码如下:
private void SaveDataToExcelFile()
{
object misValue = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
Workbook xlWorkBook = xlApp.Workbooks.Add(misValue);
Worksheet xlWorkSheet = (Worksheet)xlWorkBook.Worksheets.get_Item(1);
PropertyInfo[] props = GetPropertyInfoArray();
for (int i = 0; i < props.Length; i++)
{
xlWorkSheet.Cells[1, i + 1] = props[i].Name; //生成Excel列标题
}
for (int i = 0; i < listBox1.Items.Count; i++)
{
xlWorkSheet.Cells[i + 2, 1] = Regex.Split(listBox1.Items[i].ToString()," ")[0]; //ListBox第i行第一列
xlWorkSheet.Cells[i + 2, 2] = Regex.Split(listBox1.Items[i].ToString()," ")[1]; //ListBox第i行第二列
xlWorkSheet.Cells[i + 2, 3] = Regex.Split(listBox1.Items[i].ToString()," ")[2]; //ListBox第i行第二列
}
try
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.InitialDirectory = Directory.GetCurrentDirectory() + "\\data\\";
sfd.Filter = "Excel表格|*.xls";
sfd.ShowDialog();
string path = sfd.FileName;
xlWorkBook.SaveAs(path, XlFileFormat.xlExcel7, misValue, misValue, misValue, misValue,
XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();
MessageBox.Show("保存成功!");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
切记:保存后需将生成的Excel释放,否则会一直出现占用的情况。