iT邦幫忙

0

C# 無法寫入既有 EXCEL 問題

jimg 2020-04-10 17:46:074930 瀏覽
  • 分享至 

  • xImage

想問一下 如果是用C#新建EXCEL可以將值寫入EXCEL
也在C#參考中加入 參考 > COM > 選 Microsoft Excel 16.0 Object Library

但如果是既有的EXCEL 卻無法寫入值 程式執行都很正常
也將EXCEL 改成讀寫檔
下面是我的程式
一直找不出問題
麻煩各位大大 問題是在哪裡
試過用欄位寫入
跟矩陣寫入 都無法

aRangeChange.Value2 = "1111111111";
App.Cells[3, 1] = "BB";
//設定必要的物件
//按照順序分別是Application > Workbook > Worksheet > Range > Cell
//(1) Application :代表一個 Excel 程序。
//(2) WorkBook :代表一個 Excel 工作簿。
//(3) WorkSheet :代表一個 Excel 工作表,一個 WorkBook 包含好幾個工作表。
//(4) Range :代表 WorkSheet 中的多個單元格區域。
//(5) Cell :代表 WorkSheet 中的一個單元格。
Excel.Application App = new Excel.Application();

         //取得欲寫入的檔案路徑
         string strPath = "D:\\test.xlsx";
         Excel.Workbook Wbook = App.Workbooks.Open(strPath);
       //  Excel.Workbook Wbook = App.Workbooks.Add();
      //   Excel.Worksheet Excel

         //將欲修改的檔案屬性設為非唯讀(Normal),若寫入檔案為唯讀,則會無法寫入
         System.IO.FileInfo xlsAttribute = new FileInfo(strPath);
         xlsAttribute.Attributes = FileAttributes.Normal;

         //取得batchItem的工作表
         Excel.Worksheet Wsheet = (Excel.Worksheet)Wbook.Sheets["004"];

         //取得工作表的單元格
         //列(左至右)ABCDE、行(上至下)12345

         Excel.Range aRangeChange = Wsheet.get_Range("B3");
         //Excel.Worksheet[1, 1] = "Excel測試";
         //在工作表的特定儲存格,設定內容
         aRangeChange.Value2 = "1111111111";
         App.Cells[3, 1] = "BB";
         //設置禁止彈出保存和覆蓋的詢問提示框
         Wsheet.Application.DisplayAlerts = false;
         Wsheet.Application.AlertBeforeOverwriting = false;

         //保存工作表,因為禁止彈出儲存提示框,所以需在此儲存,否則寫入的資料會無法儲存
         Wbook.Save();

         //關閉EXCEL
         Wbook.Close();

         //離開應用程式
         App.Quit();
player iT邦大師 1 級 ‧ 2020-04-10 21:45:50 檢舉
看起來像是無解?
你要不要改用OpenXML SDK去弄呢?
Edward iT邦新手 5 級 ‧ 2020-04-13 10:33:19 檢舉
此段程式碼我測試是OK耶
但有個問題是如果執行一半中斷的話
會因為沒有正常關閉Wbook變成唯讀
此時寫入會失敗
先看看資料夾底下有沒有(~$test.xlsx)?
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2020-04-11 15:01:53
最佳解答

Google Microsoft Excel 16.0 Object Library
出現的結果似乎是 VB/VBA 比較多

Google Microsoft.Office.Interop.Excel
出現的結果似乎是 C# 比較多

在沒有更好的答案出現之前
不妨參考看看這兩篇
2017年中文文章
2018年英文文章

看更多先前的回應...收起先前的回應...
jimg iT邦新手 5 級 ‧ 2020-04-11 19:45:03 檢舉

因為已經沒有Microsoft.Office.Interop.Excel這個了

jimg iT邦新手 5 級 ‧ 2020-04-11 19:45:05 檢舉

因為已經沒有Microsoft.Office.Interop.Excel這個了

jimg iT邦新手 5 級 ‧ 2020-04-11 20:06:14 檢舉

我用的是2017的版本

jimg iT邦新手 5 級 ‧ 2020-04-11 20:06:15 檢舉

我用的是2017的版本

試試這個

jimg iT邦新手 5 級 ‧ 2020-04-13 10:30:54 檢舉

我後面將 全部打開 再重新更新
.NET Core 執行階段

.NET Framework 3.5 開發工具

.NET Framework 4 目標套件

.NET Framework 4.5 目標套件

.NET Framework 4.5.1 目標套件

.NET Framework 4.5.2 目標套件

.NET Framework 4.6 目標套件

.NET Framework 4.6.1 SDK

.NET Framework 4.6.1 目標套件

.NET Framework 4.6.2 SDK

.NET Framework 4.6.2 目標套件

.NET Framework 4.7 SDK

.NET Framework 4.7 目標套件

.NET Framework 4.7.1 SDK

.NET Framework 4.7.1 目標套件

.NET Framework 4.7.2 SDK

.NET Framework 4.7.2 目標套件
https://docs.microsoft.com/zh-tw/visualstudio/vsto/office-primary-interop-assemblies?view=vs-2019

jimg iT邦新手 5 級 ‧ 2020-04-13 10:31:23 檢舉

之後就可以 感謝各位的幫忙

0
小魚
iT邦大師 1 級 ‧ 2020-04-12 09:56:40
App.Cells[3, 1] = "BB";

不應該是

Wsheet.Cells[3, 1] = "BB";

嗎?

jimg iT邦新手 5 級 ‧ 2020-04-13 09:09:22 檢舉

結果也是一樣的 一樣無法存入 值

我要發表回答

立即登入回答