2011-05-19 227 views
2

我正在使用刪除表[SheetName $]從Excel中刪除工作表。

這只是清除工作表的數據,但不會刪除工作表。

我試過使用xls和xlsx。不適用於兩個版本!

OleDbConnection connection = new OleDbConnection(); 

try 
{ 
connection.ConnectionString = 
@"Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='drop.xlsx"; 
connection.Open(); 
OleDbCommand command = new OleDbCommand("Drop Table [MySheetName_1$]", connection); 
command.ExecuteNonQuery(); 
} 
finally 
{ 
connection.Close(); 
} 

任何幫助/指針讚賞! 謝謝

+0

如果Excel不通過SQL語法支持它,然後直接使用Excel API來從應用程序中刪除工作表。你必須找到C#語法。 '函數DeleteSheet(strSheetName As String)作爲布爾型 '此函數根據提供的單個名稱刪除工作表 '如果找不到工作表,代碼將繼續執行。 上的錯誤繼續下一步 Application.DisplayAlerts =假 PriorityExcel.Sheets(strSheetName).Delete Application.DisplayAlerts =真 結束Function' – 2011-05-19 04:25:22

+0

你能解釋一下爲什麼你需要刪除工作表?我試圖想到一個潛在的情景,但找不到一個。也許有工作?其次,你可以在服務器上安裝第三方組件嗎? – Juliusz 2011-05-19 09:04:56

+0

@Juliusz你是正確的使用第三方組件,但截至目前我不能與第三部分組件bcoz的一些X原因。 潛在的情況是:主excel有所有學生的記錄。每個學生的數據放入一張Excel表格中,每個班級需要太多的數據以便單獨填寫表格。現在我想出口很少的學生。然後複製Excel表並刪除不需要的學生表。 ....我希望你明白這一點。 – Baljeetsingh 2011-05-23 19:08:32

回答

5

不幸的是,您無法使用ADO.NET for Excel刪除工作表。相反,您將需要使用Excel Interop來執行此任務。實際DELETE語句的基本代碼如下所示:

using MSExcel = Microsoft.Office.Interop.Excel; 

private MSExcel._Application excel; 
private MSExcel._Workbook workbook; 
private MSExcel._Worksheet worksheet; 
private MSExcel.Sheets sheet; 

Excelapp.DisplayAlerts = false; 
((Excel.Worksheet)workBook.Worksheets[3]).Delete(); 
Excelapp.DisplayAlerts = true; 

這是它的外觀的基本破壞。 DisplayAlerts行旨在解決一些人刪除工作表時遇到的問題。還請注意,無法刪除Excel文件中的最後一張。如果你不看,這個問題將會得到你。

這裏有一些鏈接來幫助你:

MSDN on deleting sheeting in Excel

Post discussing the possibility of using ADO.NET to DROP a sheet in Excel

SO question about deleting a sheet in Excel using the Interop

+0

感謝您的回覆。問題是我不能在我的服務器上安裝excel,因爲有一些X原因。這意味着我不能使用inerop :(。 – Baljeetsingh 2011-05-19 06:32:48

+0

@Barjeetsingh - 這太糟糕了,但我絕對理解。我會環顧其他選項,但我認爲這可能是您唯一的(免費)選項。 – IAmTimCorey 2011-05-19 20:57:36

+0

@BiggsTRC - Excel不是隻要知道[?]有開放的soource庫,可以在沒有在服務器上安裝Excel的情況下打開。 – Juliusz 2011-05-25 08:20:47