一 访问Excel的方法
(1)采用OleDB方式
和采用OleDB访问Access的方法和相似, 连接字符串如下:
connString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + fileName + "; Extended Properties=Excel 8.0;";
(2)采用Office组件
不同版本的office足见不同,高版本的Office能兼容底版本的组件,而底版本的office不能采用高版本的组件.
组件可以Office安装目录可以找到.Excel 2000的组件为Microsoft Excel 9.0 Object library. Excel 2003组件为
Microsoft Excel 11.0 Object library.
当想Excel中插入的数据比较简单的数据建议使用OleDB的方式
二 向Excel中插入图片
采用组件的方式,可以参考下面的函数
/// <summary>
/// 采用Microsoft Excel lib 11.0 创建Excel表
/// 并添加数据
/// </summary>
/// <param name="fileName">文件名</param>
/// <param name="picPath">图片路径</param>
/// <param name="picColumn">图片列</param>
/// <param name="dataTable">插入数据表</param>
public void CreateExcelFile(string fileName,string picPath, string picColumn, System.Data.DataTable dataTable)
{
int rowCount,columnCount;
Excel.Range range;
string Index;
try
{
rowCount=dataTable.Rows.Count;
columnCount=dataTable.Columns.Count;
Missing miss = Missing.Value;
//创建Excel对象
Excel.Application m_objExcel = new Excel.Application();
m_objExcel.Visible = false;
Excel.Workbooks m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
Excel.Workbook m_objBook = (Excel.Workbook)(m_objBooks.Add(miss));
//创建Work Sheet
Excel.Sheets sheets = m_objBook.Worksheets;
Excel.Worksheet worksheet = (Excel.Worksheet) sheets.get_Item(1);
Excel.Pictures pics=(Excel.Pictures)worksheet.Pictures(Type.Missing);//建立图片集合对象
for(int i=0;i<rowCount; i++)
{
for(int j=0; j<columnCount; j++)
{
//添加图片列
if(dataTable.Columns[j].ColumnName.ToUpper() == picColumn.ToUpper())
{
Index=string.Concat(columnName[j],i+1);
range=worksheet.get_Range(Index,miss);
//根据dataTable.Rows[i][j]生成图片
pics.Insert(picPath,Type.Missing);//获取图片
Excel.Picture pic = (Picture )pics.Item(i+1);//建立图片集合某一图片对象
//设置单元格的Width,Height
range.ColumnWidth=pic.Width * 0.1;
range.RowHeight=pic.Height * 0.4;
//调整图片的位置
pic.Left = (double)range.Left + 2;
pic.Top = (double)range.Top + 2;
//调整图片的大小
pic.Width = pic.Width * 0.36;
pic.Height = pic.Height * 0.36;
}
else
{
//添加普通数据列
Index=string.Concat(columnName[j],i+1);
range=worksheet.get_Range(Index,miss);
range.Value2=dataTable.Rows[i][j].ToString();
}
}
}
m_objBook.SaveAs(fileName, miss, miss, miss, miss, miss, XlSaveAsAccessMode.xlNoChange, miss, miss,miss, miss, miss);
m_objBook.Saved = true;
m_objExcel.UserControl = false;
m_objBook.Close(false, miss, miss);
m_objExcel.Quit();
}
catch(COMException e)
{
throw new Exception(e.Message,e);
}
finally
{
Process[] process;
process=Process.GetProcessesByName("Excel");
foreach(Process p in process)
{
//关闭有当前进程启动的Excel进程
if(p.Id != Process.GetCurrentProcess().Id && p.MainModule.FileName == Process.GetCurrentProcess().MainModule.FileName)
{
p.Kill();
}
}
}
}