⑴ asp.net導出Excel文件出錯
asp.net導出excel有多種方法,最簡單的是輸出文件流到文本文件中,然後改後綴,但無法設置字元格式,像身份證之類的超過14個數字就會補零,如果數據量不大,可以使用gridview作中轉來導出。。。
⑵ 怎樣用C#把excel的一行數據讀取出來,然後把這行數據每個單元格的數據用來實例一個類
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.Office.Interop.Excel;
using System.Data.SqlClient;
using System.Data.OleDb;
using System.Reflection;
namespace ExcelPrj
{
/// <summary>
/// Excel 系統中的主文件Excel.exe 本身就是 COM 組件,通過在.NET 項目中引用Exel.exe 文件可以實現對Excel 的功能控制
/// 與COM 組件相互操作是通過使用"包裝類"(Wrapper Class) 和"代理"(Proxy) 的機制實現的.包裝類使.NET 程序可以識別COM 組件提供的介面,而代理類則是提供對 COM 介面的訪問
/// </summary>
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button3_Click(object sender, EventArgs e)
{
ExportTasks(Bind(), dataGridView1);
}
//如果 Excel 安裝在計算機上,側導出表格內容到 Excel
public void ExportTasks(DataSet TasksData, DataGridView TasksGridView)
{
// 定義要使用的Excel 組件介面
// 定義Application 對象,此對象表示整個Excel 程序
Microsoft.Office.Interop.Excel.Application excelApp = null ;
// 定義Workbook對象,此對象代表工作薄
Microsoft.Office.Interop.Excel.Workbook workBook;
// 定義Worksheet 對象,此對象表示Execel 中的一張工作表
Microsoft.Office.Interop.Excel.Worksheet ws=null;
//定義Range對象,此對象代表單元格區域
Microsoft.Office.Interop.Excel.Range r;
int row = 1; int cell = 1;
try
{
//初始化 Application 對象 excelApp
excelApp = new Microsoft.Office.Interop.Excel.Application();
//在工作薄的第一個工作表上創建任務列表
workBook = excelApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
ws =(Worksheet)workBook.Worksheets[1];
// 命名工作表的名稱為 "Task Management"
ws.Name = "Task Management";
#region 創建表格的列頭
// 遍歷數據表中的所有列
foreach (DataGridViewColumn cs in TasksGridView.Columns)
{
// 假如並不想把主鍵也顯示出來
if (cs.HeaderText != "編號")
{
ws.Cells[row, cell] = cs.HeaderText;
r = (Range)ws.Cells[row, cell];
ws.get_Range(r, r).HorizontalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter;
//此處用來設置列的樣式
cell++;
}
}
// 創建行,把數據視圖記錄輸出到對應的Excel 單元格
for (int i = 2; i < TasksData.Tables[0].Rows.Count; i++)
{
for (int j = 1; j < TasksData.Tables[0].Columns.Count; j++)
{
ws.Cells[i, j] = TasksData.Tables[0].Rows[i][j].ToString();
// r = (Range)ws.Cells[i,j];
Range rg = (Range)ws.get_Range(ws.Cells[i, j], ws.Cells[i, j]);
rg.EntireColumn.ColumnWidth = 20;
// rg.Columns.AutoFit();
rg.NumberFormatLocal = "@";
}
}
#endregion
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
//顯示 Excel
excelApp.Visible = true;
}
private void button5_Click(object sender, EventArgs e)
{
DataSet ds = Bind();
dataGridView1.DataSource = ds.Tables[0];
}
private DataSet Bind()
{
SqlConnection conn = new SqlConnection("Server=.;Database=testManage;Integrated Security=SSPI");
SqlDataAdapter da = new SqlDataAdapter("select FNumber,FExamNum,FName,FSex,FJobAdd,FCardID,FBirDate from stuInfo", conn);
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
private void button2_Click(object sender, EventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Title = "請選擇將導出的EXCEL文件存放路徑";
sfd.FileName = System.DateTime.Now.ToShortDateString() + "-學生信息";
sfd.Filter = "Excel文檔(*.xls)|*.xls";
sfd.ShowDialog();
if (sfd.FileName != "")
{
Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
if (excelApp == null)
{
MessageBox.Show("無法創建Excel對象,可能您的機器未安裝Excel");
}
else
{
Microsoft.Office.Interop.Excel.Workbooks workbooks = excelApp.Workbooks;
Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet);
Microsoft.Office.Interop.Excel.Worksheet worksheet =(Worksheet) workbook.Worksheets[1];
DataSet ds=Bind();
for (int i = 1; i < ds.Tables[0].Rows.Count; i++)
{
for (int j = 1; j < ds.Tables[0].Columns.Count;j++ )
{
if (i == 1)
{
worksheet.Cells[i, j] = dataGridView1.Columns[j].HeaderText;
}
worksheet.Cells[i+1, j] = ds.Tables[0].Rows[i][j].ToString();
}
}
//保存方式一:保存WorkBook
//workbook.SaveAs(@"F:\CData.xls",
// Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,
// Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,Missing.Value,Missing.Value,Missing.Value,
// Missing.Value,Missing.Value);
//保存方式二:保存WorkSheet
// worksheet.SaveAs(@"F:\CData2.xls",
// Missing.Value, Missing.Value, Missing.Value, Missing.Value,
// Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
////保存方式三
//workbook.Saved = true;
//workbook.SaveCopyAs(sfd.FileName);
System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
worksheet = null;
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
workbook = null;
workbooks.Close();
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks);
workbooks = null;
excelApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
excelApp = null;
MessageBox.Show("導出Excel完成!");
}
}
}
private void button4_Click(object sender, EventArgs e)
{
string strExcelFileName = @"F:\\2007-07-16-學生信息.xls";
string strSheetName = "sheet1";
#region Aspnet 操作Excel 正確
////源的定義
//string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + strExcelFileName + ";Extended Properties ='Excel 8.0;HDR=NO;IMEX=1'";
////Sql語句
//string strExcel = "select * from [" + strSheetName + "$]";
////定義存放的數據表
//DataSet ds = new DataSet();
////連接數據源
//OleDbConnection conn = new OleDbConnection(strConn);
//conn.Open();
////適配到數據源
//OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, conn);
//adapter.Fill(ds,"res");
//conn.Close();
//// 一般的情況下. Excel 表格的第一行是列名
//dataGridView2.DataSource = ds.Tables["res"];
#endregion
#region COM 組件讀取復雜Excel
Microsoft.Office.Interop.Excel.Application excelApp = null;
Microsoft.Office.Interop.Excel.Workbook workBook;
Microsoft.Office.Interop.Excel.Worksheet ws = null;
try
{
excelApp = new Microsoft.Office.Interop.Excel.Application();
workBook = excelApp.Workbooks.Open(@"F:\\Book1.xls", Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
ws = (Worksheet)workBook.Worksheets[1];
//Excel 默認為 256 列..
MessageBox.Show(ws.Cells.Columns.Count.ToString());
excelApp.Quit();
}
catch (Exception ex)
{
throw ex;
}
#endregion
}
}
}
來的
⑶ .net 中怎樣把excel文件下載下來
直接保存就OK啦!
⑷ 伺服器未安裝Excel.Application控制項,怎麼處理這個問題
首先,你的 excel 必須安裝完整版。
其次,你需要允許網頁程序創建 excel 組件。這一步,也就是說的 DCOMCNFG。你的伺服器端腳本執行時,會有一個用戶,所有網頁許可權都會限制在這個用戶下。但是很可惜,這個用戶不是 Everyone。
asp的用戶,我記得是 IUSR_xxx,IWAM_xxx。asp.net 的用戶,在 xp 下是 ASPNET,在 server 下士 Network Service。
一、准備工作
首先請確認服務端已經安裝了Office Word(以下將以Office XP為例),操作系統為win2000或XP,並且已配置好.NET的運行環境及安裝VS.NET C#開發環境後,我們就可以打開VS.NET,並新建一個Visual C#項目ASP.NET Web應用程序,位置為「」。(如圖一)
二、引用Word對象庫文件
要操作Word,我們就需要Word的對象庫文件「MSWORD.OLB」(word 2000為MSWORD9.OLB),通常安裝了Office Word後,你就可以在office安裝目錄的Office10文件夾下面找到這個文件,當我們將這個文件引入到項目後,我們就可以在源碼中使用各種操作函數來操作Word。具體做法是打開菜單欄中的項目添加引用瀏覽,在打開的「選擇組件」對話框中找到MSWORD.OLB後按確定即可引入此對象庫文件,vs.net將會自動將庫文件轉化為DLL組件,這樣我們只要在源碼中創建該組件對象即可達到操作Word的目的!
三、Webform1.aspx.cs代碼
完成添加引用後,MSWORD.OLB已經轉化為相關DLL文件並放置於項目的BIN目錄下了,這樣我們只需在源碼中創建該對象,並使用word庫文件內置的操作函數即可輕松實現操作Word,Webform1.aspx.cs源碼請參見
五、web.config設置
web.config文件還需添加一句 identity impersonate="true"/以啟用模擬身份,因為默認ASPNET這個用戶是沒有許可權訪問Word.ApplicationClass(),當啟用模擬身份後所有頁面將會使用匿名Internet用戶帳戶(IUSR_machinename)這個用戶名的許可權執行,這樣我們就能成功訪問Word.ApplicationClass()並在ASP.NET中操作Word!
//傳文檔所在路徑返迴文檔內容
publicstringDoc2Text(stringdocFileName)
{
//實例化COM
Microsoft.Office.Interop.Word.ApplicationClasswordApp=newMicrosoft.Office.Interop.Word.ApplicationClass();
objectfileobj=docFileName;
objectnullobj=System.Reflection.Missing.Value;
//打開指定文件(不同版本的COM參數個數有差異,一般而言除第一個外都用nullobj就行了)
Microsoft.Office.Interop.Word.Documentdoc=wordApp.Documents.Open(reffileobj,refnullobj,refnullobj,
refnullobj,refnullobj,refnullobj,
refnullobj,refnullobj,refnullobj,
refnullobj,refnullobj,refnullobj,refnullobj,refnullobj,refnullobj,refnullobj
);
//取得doc文件中的文本
stringoutText=doc.Content.Text;
//關閉文件
doc.Close(refnullobj,refnullobj,refnullobj);
//關閉COM
wordApp.Quit(refnullobj,refnullobj,refnullobj);
//返回
returnoutText;
}
在讀取的時候會有損壞的文件 和被加密的文件等問題 總之C#和office的兼容性不太好
別忘了要引用word的dll
引用文件夾 右鍵添加引用 在組件里找Microsoft.Office.Interop.Word
讀出了word文檔再把它寫入sqlserver資料庫就可以了.