利用C#语言操作Excel文挡,就象Sql语句查询sqldatabase 一样,当我打开一个Excel文挡时,调用C#程式,去便利所有工作簿的单元格,提取出已我需要的那部分数据资料,但是每个Excel文挡的那部分数据的行,列不固定,而且有些数据是和别的数据混在一起。C#程式是否能实现如此功能?
因为要加急处理一批Excel数据,但是文挡数量很大,人工操作起码点几天时间,这个方案的可行性有多高?我个人觉得要实现相当困难,不知哪个高手指点下,万分感谢!!!
因为要加急处理一批Excel数据,但是文挡数量很大,人工操作起码点几天时间,这个方案的可行性有多高?我个人觉得要实现相当困难,不知哪个高手指点下,万分感谢!!!
这个程式基本要达成1、OFFICE里的查找功能。(没想法,不能固定X,Y,不清楚该怎么去定位)
2、对查找到的数据,按分类进行统计计算,多个字段,非一个字段,而且要分类统计,不仅仅全加在一起,还涉及平均数。(这里就要求按分类找到的是多行多列,类似一张表,然后进行统计计算)
3、每个文挡统计结束后按分类在同一指定文挡中,按分类进行数据插入,将统计值存入其中,(可以实现)
也就是说几百个文挡最终汇总为一个文挡。
部门 类别 总价值
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Data.OleDb;using Excel;//操作EXCEL必须把这个DLL引用近来namespace read_excel
{
public partial class Form1 : Form
{
private System.Data.DataSet myDataSet;
public Form1()
{
InitializeComponent();
GetConnetion();
}
private void GetConnetion()
{
//EXCEL作为数据源的CONNECTION
string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = C:\\test.xls;Extended Properties=Excel 8.0";
OleDbConnection myConn = new OleDbConnection(strCon);
//string strCom = " SELECT * FROM [Sheet1$A1:E4] ";//Command1
myConn.Open();
OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn);
myDataSet = new DataSet();
myCommand.Fill(myDataSet, "[Sheet1$]");
myConn.Close(); } private void button1_Click(object sender, EventArgs e)
{
//这一段不用看,呵呵
DataGrid1.DataSource = myDataSet;
DataGrid1.DataMember = "[Sheet1$]";
dataGrid2.DataSource = myDataSet;
dataGrid2.DataMember = "[Sheet1$]";
} private void button2_Click(object sender, EventArgs e)
{
Excel.Application myExcel = new Excel.Application();
myExcel.Application.Workbooks.Add(true);
//This part used for only write values which values come from here
myExcel.Cells[1, 1] = "Li";
myExcel.Cells[1, 2] = "Xin";
myExcel.Cells[2, 1] = "Love";
myExcel.Cells[3, 1] = "Liao";
myExcel.Cells[3, 2] = "Sheng";
myExcel.Cells[3, 3] = "Hui";
//This part is used for write values which values come from datagrid
//for (int i = 1; i < 9; i++)
//{
// for (int j = 1; j < 5; j++)
// {
// myExcel.Cells[i, j] = Convert.ToInt32(this.DataGrid1[i, j].ToString()) + 1000;
// }
//}把DATAGRID的数据写如
//myExcel.Save(@"myExcel.xls");
myExcel.Save(@"C:\FuckYou.xls");
myExcel.Visible = true;
//myExcel.Quit();
}
}
}
至于楼主需求,我想EXCEL一定提供这样的实现:)
如果是一行一行的规范的格式存储,那么不妨使用ODBC,这样可以省去你Excel编成的麻烦。
Excel的函数功能还是很强大的,也可以写脚本……
如果文档都不规范就别谈什么可行性了,
一点小建议,你可以把列名读出来(取第一列,判断Value2的值是否是要的字段),
比如A1的单元格子是其他,B1的单元格是"类别",那就把B这列记下,当取类别时候,
就取B列,每开个文档都先做取列判定;从你提供的线索就有这些,是否说的更详细些?