C#操作Excel刷新数据出现的问题,几个月了呀,高手咋还没出现
本帖最后由 ykdrj 于 2011-12-16 20:28:19 编辑 代码没有任何报错,手动打开excel右击透视表点击刷新可以刷新到数据(所以数据源不会有问题)
大侠们帮忙看看是不是逻辑有什么问题
using System;
using System.Collections.Generic;
using Excel = Microsoft.Office.Interop.Excel;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Excel.Application xlApp = new Excel.ApplicationClass();
Excel.Workbook xlBook = null;
Excel.Worksheet xlSheet = null;
xlBook = xlApp.Workbooks.Open("\\\\127.0.0.1\\test.xlsx");
string pivotSheetName = "Sheet1";
foreach (Excel.Worksheet displayWorksheet in xlBook.Sheets)
{
if (pivotSheetName == displayWorksheet.Name)
{
xlSheet = displayWorksheet;
((Excel.PivotTable)xlSheet.PivotTables("数据透视表1")).PivotCache().Refresh();
System.Console.WriteLine("刷新成功");
}
}
xlApp.DisplayAlerts = false;
xlApp.Workbooks.Close();
xlApp.Quit();
}
}
}
[解决办法]
你要不试试LINq ?
[解决办法]
你是不是要用程序操作EXCEL
我这里有例子----平时我是要用到才看的。(我也不很会,下面是我的笔记 )
//下面是读EXCEL
// 要选引入 nopi
private void button1_Click(object sender, EventArgs e)
{
DataTable myT = ExcelToDataTable("c:/供应商导入模板.xls", "sheet1");
StringBuilder strs=new StringBuilder();
for (int j = 0; j < myT.Rows.Count; j++)
{
for (int i = 0; i < 8; i++)
{
strs.Append("\t");
if (myT.Rows[j][i]!= null)
{
strs.Append(myT.Rows[j][i].ToString());
}
}
strs.Append(Environment.NewLine);
}
textBox1.Text = strs.ToString();
}
public static DataTable ExcelToDataTable(string strExcelFileName, string strSheetName)
{
//源的定义
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + strExcelFileName + ";" + "Extended Properties='Excel 8.0;HDR=NO;IMEX=1';";
//Sql语句
//string strExcel = string.Format("select * from [{0}$]", strSheetName); 这是一种方法
string strExcel = "select * from [sheet1$]";
//如果只想读取前两列可以用:select * from [Sheet1$A:B]
//如果只想读取A1到B2的内容,就用:select * from [Sheet1$A1:B2]
//定义存放的数据表
DataSet ds = new DataSet();
//连接数据源
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
//适配到数据源
OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, strConn);
adapter.Fill(ds, strSheetName);
conn.Close();
}