usingDocumentFormat.OpenXml;usingDocumentFormat.OpenXml.Packaging;usingDocumentFormat.OpenXml.Spreadsheet;usingSystem;usingSystem.Linq;usingSystem.Text.RegularExpressions;namespaceOpenXMLSDK_Sample1{classProgram{staticvoidMain(string[]args){conststringFILE=@"C:\Users\Public\Documents\Book1.xlsx";conststringSHEET_NAME="Sheet1";conststringCELL_ADDRESS="A6";constintVALUE=123456;using(SpreadsheetDocumentexcelDoc=SpreadsheetDocument.Open(FILE,true)){WorkbookPartbookPart=excelDoc.WorkbookPart;intsheet_index=GetWorksheetIndex(bookPart,SHEET_NAME);WorksheetPartsheet_part=GetWorksheetPart(bookPart,sheet_index);//行の特定uintrowIndex=GetRowIndex(CELL_ADDRESS);Rowrow=sheet_part.Worksheet.Descendants<Row>().FirstOrDefault(r=>r.RowIndex==rowIndex);if(row==null){//行がない場合は行を新規作成するrow=newRow(){RowIndex=newUInt32Value(rowIndex)};SheetDatash_data=sheet_part.Worksheet.Descendants<SheetData>().First();//場所を特定して行を挿入(行は行番号で昇順に並ばないとだめ)RowrRow=sh_data.Elements<Row>().LastOrDefault(r=>r.RowIndex<rowIndex);if(rRow==null){sh_data.InsertAt(row,0);}else{sh_data.InsertAfter(row,rRow);}}uintcolIndex=GetColumnIndex(CELL_ADDRESS);//セルを特定Cellcell=row.Elements<Cell>().FirstOrDefault(c=>c.CellReference.Value==CELL_ADDRESS);if(cell==null){cell=newCell(){CellReference=newStringValue(CELL_ADDRESS)};//cellは昇順に書き込む必要があるCellrCell=row.Elements<Cell>().LastOrDefault(c=>GetColumnIndex(c.CellReference)<colIndex);if(rCell==null){row.InsertAt(cell,0);}else{row.InsertAfter(cell,rCell);}}//値をセット(セットする値が文字列ではない場合)cell.CellValue=newCellValue(VALUE.ToString());//保存sheet_part.Worksheet.Save();}//ファイルを開くSystem.Diagnostics.Process.Start(FILE);}staticintGetWorksheetIndex(WorkbookPartbook_part,stringsheet_name){Sheetssheets=book_part.Workbook.GetFirstChild<Sheets>();//シートのエレメントの順番(0スタート)intsheet_index=0;foreach(Sheetshinsheets){if(sh.Name==sheet_name)break;sheet_index++;}returnsheet_index;}staticWorksheetPartGetWorksheetPart(WorkbookPartbook_part,intindex){Sheetssheets=book_part.Workbook.GetFirstChild<Sheets>();if(index>=sheets.Count()){returnnull;}stringtarget_relationshipID=sheets.Descendants<Sheet>().ElementAt(index).Id;return(WorksheetPart)book_part.GetPartById(target_relationshipID);}publicstaticuintGetColumnIndex(stringcellName){stringcolumn_name=GetColumnName(cellName).ToUpper();conststringcolChars="ABCDEFGHIJKLMNOPQRSTUVWXYZ";uintcolumn_index=0;for(inti=column_name.Length;i>0;i--){column_index+=(uint)((colChars.IndexOf(column_name.Substring(column_name.Length-i,1))+1)*Math.Pow(26,i-1));}returncolumn_index;}//https://learn.microsoft.com/ja-jp/office/open-xml/spreadsheet/how-to-get-a-column-heading-in-a-spreadsheet// Given a cell name, parses the specified cell to get the row index.publicstaticuintGetRowIndex(stringcellName){// Create a regular expression to match the row index portion the cell name.Regexregex=newRegex(@"\d+");Matchmatch=regex.Match(cellName);returnuint.Parse(match.Value);}//https://learn.microsoft.com/ja-jp/office/open-xml/spreadsheet/how-to-get-a-column-heading-in-a-spreadsheetpublicstaticstringGetColumnName(stringcellName){Matchmatch=Regex.Match(cellName,"[A-Za-z]+");returnmatch.Value;}}}