|
分類:[.NET 全般]
Windows フォームアプリケーション.NetFramework c#
Windows10 Office2019
今datagridviewで表を画面に表示していまして
btnWriteボタンでG.folderPathの中にあるエクセルに対して
書込みに行っています
private void btnWrite_Click(object sender, EventArgs e)
{
int totalRows = dataGridView1.Rows.Count - 1;
int processedRows = 0;
if (totalRows < 0)
{
totalRows = 0;
}
Excel.Application excelApp = new Excel.Application();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (row.IsNewRow) continue;
if (row.Cells[23].Value?.ToString() == "〇")
{
try
{
string filePath = row.Cells[26].Value.ToString();
int lineNumber = Convert.ToInt32(row.Cells[27].Value);
ProcessRow(excelApp, row, filePath, lineNumber);
processedRows++;
}
catch (Exception ex)
{
MessageBox.Show($"エラーが発生しました: {ex.Message}");
}
}
}
excelApp.Quit();
ReleaseObject(excelApp);
}
private void ProcessRow(Excel.Application excelApp, DataGridViewRow row, string filePath, int lineNumber)
{
Excel.Workbook workbook = excelApp.Workbooks.Open(filePath);
Excel.Worksheet worksheet = workbook.Sheets[1];
WriteCellData(row, worksheet, lineNumber, 6, "M/d", 3.5);
WriteCellData(row, worksheet, lineNumber, 7);
if (chkHand.Checked)
{
for (int columnIndex = 8; columnIndex <= 23; columnIndex++)
{
WriteCellData(row, worksheet, lineNumber, columnIndex);
}
}
else
{
for (int columnIndex = 8; columnIndex <= 23; columnIndex++)
{
worksheet.Cells[lineNumber, columnIndex + 1].Value = row.Cells[columnIndex].Value;
}
}
WriteCellData(row, worksheet, lineNumber, 24, "M/d", 3.5);
WriteCellData(row, worksheet, lineNumber, 25);
workbook.Save();
workbook.Close(false);
ReleaseObject(workbook);
ReleaseObject(worksheet);
}
private void WriteCellData(DataGridViewRow row, Excel.Worksheet worksheet, int lineNumber, int columnIndex, string numberFormat = null, double? columnWidth = null)
{
object cellValue = row.Cells[columnIndex].Value;
var cell = worksheet.Cells[lineNumber, columnIndex + 1];
cell.Font.Size = 6;
cell.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
if (numberFormat != null)
{
cell.NumberFormat = numberFormat;
}
if (columnWidth.HasValue)
{
cell.ColumnWidth = columnWidth.Value;
}
cell.Value = cellValue;
}
private void ReleaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch (Exception ex)
{
MessageBox.Show("COMオブジェクトの解放中にエラーが発生しました: " + ex.ToString());
}
finally
{
GC.Collect();
}
}
それを違う人のパソコンで動作確認しようと思ったらエラーが発生しました
その人のパソコンはWindows11 でOffice365を使っています
エラーの内容が下記になります
"エラーが発生しました:型’Microsoft.Office.Interrop.Excel.ApplicationClass'のCOMオブジェクトをインターフェイス型'Microsoft.Office.Interrop.Excel._Application'にキャストできません。IID'{000208D5-0000-0000-C000-000000000046}'が指定されたインターフェイスのCOMコンポーネント上でのQueryInterface呼び出しのときに次のエラーが発生したため、この操作に失敗しました:インターフェイスが登録されていません(HRESULTからの例外:0x80040155)。
これはOffice365を使用しているからでしょうか
教えて下さい。宜しくお願い致します
|