diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9491a2f --- /dev/null +++ b/.gitignore @@ -0,0 +1,363 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Oo]ut/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd \ No newline at end of file diff --git a/docs/000 受領物/20250804_中村様、浦崎様/20250717_溶接加工計画テーブル設計書.xlsx b/docs/000 受領物/20250804_中村様、浦崎様/20250717_溶接加工計画テーブル設計書.xlsx new file mode 100644 index 0000000..089b1a0 Binary files /dev/null and b/docs/000 受領物/20250804_中村様、浦崎様/20250717_溶接加工計画テーブル設計書.xlsx differ diff --git a/docs/000 受領物/20250804_中村様、浦崎様/SFTP接続例.xlsx b/docs/000 受領物/20250804_中村様、浦崎様/SFTP接続例.xlsx new file mode 100644 index 0000000..f26fc1c Binary files /dev/null and b/docs/000 受領物/20250804_中村様、浦崎様/SFTP接続例.xlsx differ diff --git a/docs/000 受領物/20250804_中村様、浦崎様/溶接_加工計画ヒヤリング資料.pptx b/docs/000 受領物/20250804_中村様、浦崎様/溶接_加工計画ヒヤリング資料.pptx new file mode 100644 index 0000000..a1158f0 Binary files /dev/null and b/docs/000 受領物/20250804_中村様、浦崎様/溶接_加工計画ヒヤリング資料.pptx differ diff --git a/docs/000 受領物/20250919_中村様(実データ)/102期生産計画MC上期.xlsx b/docs/000 受領物/20250919_中村様(実データ)/102期生産計画MC上期.xlsx new file mode 100644 index 0000000..41c82be Binary files /dev/null and b/docs/000 受領物/20250919_中村様(実データ)/102期生産計画MC上期.xlsx differ diff --git a/docs/000 受領物/20250919_中村様(実データ)/102期生産計画マルチ上期.xlsx b/docs/000 受領物/20250919_中村様(実データ)/102期生産計画マルチ上期.xlsx new file mode 100644 index 0000000..0a616fd Binary files /dev/null and b/docs/000 受領物/20250919_中村様(実データ)/102期生産計画マルチ上期.xlsx differ diff --git a/docs/000 受領物/20250926_中村様(仕様変更)/20250925_溶接加工計画テーブル設計書.xlsx b/docs/000 受領物/20250926_中村様(仕様変更)/20250925_溶接加工計画テーブル設計書.xlsx new file mode 100644 index 0000000..1b3841d Binary files /dev/null and b/docs/000 受領物/20250926_中村様(仕様変更)/20250925_溶接加工計画テーブル設計書.xlsx differ diff --git a/docs/000 受領物/20251022_中村様(新書式)/WE生産計画フォーマット仕様(サンプル).xlsx b/docs/000 受領物/20251022_中村様(新書式)/WE生産計画フォーマット仕様(サンプル).xlsx new file mode 100644 index 0000000..f7e35e0 Binary files /dev/null and b/docs/000 受領物/20251022_中村様(新書式)/WE生産計画フォーマット仕様(サンプル).xlsx differ diff --git a/docs/000 受領物/20251023_中村様(アルミ加工Excelファイル)/生産計画5月検討⊿1_ヒヤリングメモあり.xlsx b/docs/000 受領物/20251023_中村様(アルミ加工Excelファイル)/生産計画5月検討⊿1_ヒヤリングメモあり.xlsx new file mode 100644 index 0000000..602ec92 Binary files /dev/null and b/docs/000 受領物/20251023_中村様(アルミ加工Excelファイル)/生産計画5月検討⊿1_ヒヤリングメモあり.xlsx differ diff --git a/docs/000 受領物/20251023_中村様(アルミ加工Excelファイル)/生産計画8月0722.xlsx b/docs/000 受領物/20251023_中村様(アルミ加工Excelファイル)/生産計画8月0722.xlsx new file mode 100644 index 0000000..9865bff Binary files /dev/null and b/docs/000 受領物/20251023_中村様(アルミ加工Excelファイル)/生産計画8月0722.xlsx differ diff --git a/docs/000 受領物/20251104_中村様(INIファイル)/setting.ini b/docs/000 受領物/20251104_中村様(INIファイル)/setting.ini new file mode 100644 index 0000000..69034c9 --- /dev/null +++ b/docs/000 受領物/20251104_中村様(INIファイル)/setting.ini @@ -0,0 +1,218 @@ +[ExcelToCsvWeOrder] +Title=Excel→CSV 処理(溶接加工向けデータ連携ツール) +001=ExcelToCsv_WeOrder(ExcelToCsvIni) +;001=ExcelToCsv_WeOrder(ExcelToCsvAlumiIni) +002=SFTPUpload(SFTPUploadIni) +003=Cleanup(CleanupAfterUploadIni) + +[ExcelToCsvIni] +DaysToStartOffset=1 +InFolderPath=C:\CSV\read +;InFolderPath=C:\CSV\溶接加工計画 +;FileNamePattern=*生産計画*.xlsx +FileNamePattern=WE生産計画*.xlsx +ExcelSheetCheckItems=D2[or]D3,ライン|E2[or]E3,シフト|C5[or]D5,機種コード[or]コード|E5,仕向|F5,タクト|G5,日付 +ExcelLineJudgeCol=D +ExcelDateRowMode=Fixed +ExcelDateRow=5 +ExcelDateRowStartCol=H +ExcelDateRowEndValue=TOTAL +ExcelHiddenRowHandling=skip +ExcelDataStartRowJudgeCol=D +ExcelDataStartRowJudgeValues=コード,機種,機種コード,基本部番 +ExcelDataEndJudgeCol=G +ExcelDataEndJudgeValue= +ExcelMcSeisanFukaJudgeCol=B +ExcelMcSeisanFukaJudgeValuePattern=*生産負荷* +ExcelAfWeCol=G +OutFolderPath=C:\CSV\溶接加工計画 +CsvFileName=WeOrder +FileDtPrefix=yyyyMMdd-HHmmss_ +FileDtSuffix=_yyyyMMdd_HHmmss +;CsvEncoding=UTF-8 With BOM + +[ExcelToCsvAlumiIni] +DaysToStartOffset=1 +InFolderPath=C:\CSV\溶接加工計画 +FileNamePattern=*アルミ*.xlsx +ExcelSheetCheckItems=A3,YEAR|B3,MONTH|C3,ライン名|G4[or]K4,生産計画|A7[or]A8,部番|G7[or]G8,日付|G8[or]G9,刻印 +ExcelLineJudgeCol=C +ExcelDateRowMode=Judge +ExcelDateRow=5 +ExcelDateRowJudgeCol=G +ExcelDateRowJudgeValue=日付 +ExcelDateRowStartCol=H +ExcelDateRowEndValue=TOTAL +ExcelHiddenRowHandling=skip +ExcelDataStartRowJudgeCol=D +ExcelDataStartRowJudgeValues=コード,機種,機種コード,基本部番 +ExcelDataEndJudgeCol=G +ExcelDataEndJudgeValue= +ExcelMcSeisanFukaJudgeCol=B +ExcelMcSeisanFukaJudgeValuePattern=*生産負荷* +ExcelAfWeCol=G +OutFolderPath=C:\CSV\溶接加工計画 +CsvFileName=WeOrder.csv +FileDtPrefix=yyyyMMdd-HHmmss_ +FileDtSuffix=_yyyyMMdd_HHmmss +;CsvEncoding=UTF-8 With BOM + +[SFTPUploadIni] +Host=10.22.6.10 +Port=22 +UserName=J0136167A +PrivateKeyFilePath=C:\keys\J0136167A.ppk +PassPhrase= +RemotePath=/Test/WE_PLAN +InFolderPath=C:\CSV\溶接加工計画 +FileNamePatterns=*.csv + +[CleanupAfterUploadIni] +FolderPath=C:\CSV\SFTPDL +MaxDays=90 +MaxFileCount=100 + +[CsvToDbWeOrder] +Title=CSV→DB 処理 +001=SFTPDownload(SFTPDownloadIni) +002=CsvToDb(CsvToDbIni) +003=Backup(BackupIni) +;003=SFTPDelete(SFTPDeleteIni) +004= + +[SFTPDownloadIni] +Host=10.22.6.10 +Port=22 +UserName=J0136167A +PrivateKeyFilePath=C:\keys\J0136167A.ppk +PassPhrase={[SFTP]PassPhrase} +RemotePath=/Test/WE_PLAN +OutFolderPath=C:\CSV\SFTPDL +FileNamePatterns=*WeOder*.csv + +[CsvToDbIni] +SqlFolderPath=SQL +DaysToStartOffset=1 +CsvFileNamePatterns={[CSV]FileNamePatterns} +CsvFolderPath=C:\CSV\SFTPDL +;CsvEncoding=UTF-8 With BOM +DbProviderName=ポスグレ +DbConnectionString=Host=RL23091509;Port=5432;Database=vaptracedb;Username=postgres;Password=postgres +;DbConnectionString=Host=localhost;Port=5432;Database=postgres;Username=postgres;Password=sfsadmin +DeleteBeforeInsertSqlFiles=DeleteBeforeInsertWeOrder +InsertSqlFiles=InsertWeOrder +DupCheckSqlFiles= + +[SFTPDeleteIni] +Host={[SFTP]Host} +Port={[SFTP]Port} +UserName={[SFTP]UserName} +PrivateKeyFilePath={[SFTP]PrivateKeyFilePath} +PassPhrase={[SFTP]PassPhrase} +RemotePath={[SFTP]RemotePath} +FileNamePatterns={[CSV]FileNamePatterns} + +[BackupIni] +SourceFolderPath=C:\CSV\SFTPDL +DestinationFolderPath=C:\SFTPCSV\DL\Backup001 +FileNamePatterns=*WeOrder*.csv +MaxDays=30 +MaxFileCount=30 +PrefixDtFormat=yyyy-MM-dd-HH-mm-ss_ +SuffixDtFormat=_yyyyMMddHHmmss +[Logging] +LogLevel=Information +LogFilePath=Log\ExcelToCsvToDbLog.log +RollingInterval=Month + +[SFTP] +Host=172.22.4.89 +Port=22 +UserName=noboru +PrivateKeyFilePath=C:\Users\jpa01378\id_rsa_dotnet +PassPhrase=uI14MRtLpR7iLxWvaTGFfw== +RemotePath=bbb + +[CSV] +FileNamePatterns=*WeOrder*.csv + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[ExcelToCsvIniあああああ] +;Title=Excel→CSV 処理(溶接加工向けデータ連携ツール) +;DaysToStartOffset=1 +;InFolder=C:\CSV\溶接加工計画 +;InFileName=2023*_溶接加工計画.xlsx +;InFileName=*生産計画*.xlsx +;ExcelSheetCheckItems=2,5,ライン|2,6,シフト|5,3,機種コード|5,5,部番 +;ExcelSheetCheckItems=D2[or]D1,ライン|E2[or]E1,シフト|D5,機種コード[or]コード|E5,仕向|F5,タクト|G5,日付 +;ExcelLineJudgeCol=4 +;ExcelDateRow=5 +;ExcelHiddenRowHandling=skip +;ExcelDateRowStartCol=9 +;ExcelDateRowStartCol=8 +;ExcelDateRowEndValue=TOTAL +;ExcelDataStartRow=6 +;ExcelDataEndJudgeCol=8 +;ExcelDataEndJudgeCol=7 +;ExcelDataEndJudgeValue= +;ExcelMcSeisanFukaRowJudgeCol=2 +;ExcelMcSeisanFukaRowJudgeValues=MC生産負荷(2交替),マルチ生産負荷(2交替) +;ExcelMcSeisanFukaRowJudgeValuePattern=*生産負荷* +;NameToIdListForLine=MC,57|MULTI,58|50号機,50|マルチ,58|RFS/A,901|T/T,902 +;ExcelAfWeCol=8 +;ExcelAfWeCol=7 +;CsvTempFolder=C:\CSV\溶接加工計画 +;CsvFileNameTactManagement=TactManagement.csv +;CsvFileNameWeOrder=WeOrder +;FileDtPrefix=yyyyMMdd-HHmmss_ +;FileDtSuffix=_yyyyMMdd_HHmmss +;CsvEncoding=UTF-8 With BOM +;[CsvToDb] +;Title=CSV to DB 処理(溶接加工向けデータ連携ツール) +;DaysToStartOffset=2 +;CsvFileNamePatterns=*TactManagement*.csv,*WeOrder*.csv +;CsvFileNamePatterns=*WeOrder*.csv +;CsvTempFolder=C:\CSV\DL +;CsvEncoding=UTF-8 With BOM +;DbProviderName=ポスグレ +;DbConnectionString=Host=localhost;Port=5432;Database=postgres;Username=postgres;Password=sfsadmin +;DbConnectionString=Host=localhost;Port=5432;Database=postgres;Username=postgres;Password=sfsadmin;ENCODING=SJIS +;DeleteBeforeInsertSqlFiles=,DeleteBeforeInsertWeOrder +;DeleteBeforeInsertSqlFiles=DeleteBeforeInsertWeOrder +;DeleteBeforeInsertSqlFiles=DELETE FROM vap.t_weorder WHERE we_product_date >= :START_DATE; +;InsertSqlFiles=InsertTactManagement,InsertWeOrder +;InsertSqlFiles=InsertWeOrder +;DupCheckSqlFiles=DupCheckTactManagement, +;DupCheckSqlFiles= +;ActionAfterDbRegist=BACKUP +;[Backup] +;SourceFolderPath=C:\CSV\DL +;DestinationFolderPath=C:\CSV\DL\Backup001 +;FileNamePatterns=*TactManagement*.csv,*WeOrder*.csv +;FileNamePatterns=*WeOrder*.csv +;MaxDays=30 +;MaxFileCount=30 +;PrefixDtFormat=yyyy-MM-dd-HH-mm-ss_ +;SuffixDtFormat=_yyyyMMddHHmmss +;[SFTP] +;Host=aaaaaaa +;Host=172.316.137 // 先週のアドレス! +;Host=172.23.86.69 +;Port=5432 +;Port=22 +;UserName=aaaa +;UserName=noboru +;PrivateKeyFilePath=C:\Users\jpa01378\id_rsa_dotnetああああああ +;PrivateKeyFilePath=C:\Users\jpa01378\id_rsa_dotnet +;PassPhrase=bbbbb +;PassPhrase=uI14MRtLpR7iLxWvaTGFfw== +;RemotePath=bbb +;InFolderPath=C:\CSV\溶接加工計画 +;OutFolderPath=C:\CSV\DL +;FileNamePatterns=*WeOrder*.csv +;ActionAfterSFTPDownload=DELETE +;ActionAfterSFTPUpload=CLEANUP(Cleanup) +;[Cleanup] +;FolderPath=C:\CSV\DL +;MaxDays=7 +;MaxFileCount=100 diff --git a/docs/000 受領物/20251117_中村様(新溶接1ライン)/【新溶接1ライン】102期 12月溶接1計画.xlsx b/docs/000 受領物/20251117_中村様(新溶接1ライン)/【新溶接1ライン】102期 12月溶接1計画.xlsx new file mode 100644 index 0000000..3b66fbe Binary files /dev/null and b/docs/000 受領物/20251117_中村様(新溶接1ライン)/【新溶接1ライン】102期 12月溶接1計画.xlsx differ diff --git a/docs/000 受領物/20260108_瀧様(新Excel書式)/★【20260105】溶接鉄フレーム生産計画_2025_1226 周寳改.xlsm b/docs/000 受領物/20260108_瀧様(新Excel書式)/★【20260105】溶接鉄フレーム生産計画_2025_1226 周寳改.xlsm new file mode 100644 index 0000000..83707e8 Binary files /dev/null and b/docs/000 受領物/20260108_瀧様(新Excel書式)/★【20260105】溶接鉄フレーム生産計画_2025_1226 周寳改.xlsm differ diff --git a/docs/000 受領物/20260304_中村様(SPのExcel)/SP計画2026-02.xlsx b/docs/000 受領物/20260304_中村様(SPのExcel)/SP計画2026-02.xlsx new file mode 100644 index 0000000..20a6e29 Binary files /dev/null and b/docs/000 受領物/20260304_中村様(SPのExcel)/SP計画2026-02.xlsx differ diff --git a/docs/000 受領物/20260304_中村様(SPのExcel)/SP計画2026-02(加工).xlsx b/docs/000 受領物/20260304_中村様(SPのExcel)/SP計画2026-02(加工).xlsx new file mode 100644 index 0000000..20a6e29 Binary files /dev/null and b/docs/000 受領物/20260304_中村様(SPのExcel)/SP計画2026-02(加工).xlsx differ diff --git a/docs/000 受領物/20260306_中村様(SP仕様書)/SP計画2026-02_仕様書.xlsx b/docs/000 受領物/20260306_中村様(SP仕様書)/SP計画2026-02_仕様書.xlsx new file mode 100644 index 0000000..5d6cbe2 Binary files /dev/null and b/docs/000 受領物/20260306_中村様(SP仕様書)/SP計画2026-02_仕様書.xlsx differ diff --git a/docs/000 受領物/20260316_瀧様(新書式でWEが出てない)/20260314-165519_WeOrderNewFormat_20260314_165519.csv b/docs/000 受領物/20260316_瀧様(新書式でWEが出てない)/20260314-165519_WeOrderNewFormat_20260314_165519.csv new file mode 100644 index 0000000..e0b7a91 --- /dev/null +++ b/docs/000 受領物/20260316_瀧様(新書式でWEが出てない)/20260314-165519_WeOrderNewFormat_20260314_165519.csv @@ -0,0 +1,131 @@ +"create_record_date","line_id","line_name","basic_parts_no","work_date","af_amount","we_amount","kd_we_amount","production_lur","model_cd","derivation","tact_time" +"2026/03/14 16:55:14","105","RF,S/A","50100K88 B500","2026/03/16 0:00:00","0","200","0","0","K88","AF","110" +"2026/03/14 16:55:14","105","RF,S/A","50100K88 B500","2026/03/17 0:00:00","0","200","0","0","K88","AF","110" +"2026/03/14 16:55:14","105","RF,S/A","50100K88 B500","2026/03/19 0:00:00","0","200","0","0","K88","AF","110" +"2026/03/14 16:55:14","105","RF,S/A","50100K88 B500","2026/03/20 0:00:00","0","200","0","0","K88","AF","110" +"2026/03/14 16:55:14","105","RF,S/A","50100K88 B500","2026/03/21 0:00:00","0","200","0","0","K88","AF","110" +"2026/03/14 16:55:14","105","RF,S/A","50100K88 B500","2026/03/23 0:00:00","0","200","0","0","K88","AF","110" +"2026/03/14 16:55:14","105","RF,S/A","50100K88 B500","2026/03/24 0:00:00","0","200","0","0","K88","AF","110" +"2026/03/14 16:55:14","105","RF,S/A","50100K88 B500","2026/03/25 0:00:00","0","200","0","0","K88","AF","110" +"2026/03/14 16:55:14","106","T/T","RRCMPMKT D700","2026/03/16 0:00:00","0","187","0","0","MKT","AF","180" +"2026/03/14 16:55:14","106","T/T","RRCMPMKT D700","2026/03/17 0:00:00","0","191","0","0","MKT","AF","180" +"2026/03/14 16:55:14","106","T/T","RRCMPMKT D700","2026/03/18 0:00:00","0","192","0","0","MKT","AF","180" +"2026/03/14 16:55:14","106","T/T","RRCMPMKT D700","2026/03/19 0:00:00","0","184","0","0","MKT","AF","180" +"2026/03/14 16:55:14","106","T/T","RRCMPMKT D700","2026/03/20 0:00:00","0","181","0","0","MKT","AF","180" +"2026/03/14 16:55:14","106","T/T","RRCMPMKT D700","2026/03/21 0:00:00","0","169","0","0","MKT","AF","180" +"2026/03/14 16:55:14","106","T/T","RRCMPMKT D700","2026/03/23 0:00:00","0","172","0","0","MKT","AF","180" +"2026/03/14 16:55:14","106","T/T","RRCMPMKT D700","2026/03/24 0:00:00","0","161","0","0","MKT","AF","180" +"2026/03/14 16:55:14","106","T/T","RRCMPMKT D700","2026/03/25 0:00:00","0","172","0","0","MKT","AF","180" +"2026/03/14 16:55:14","64","マルチ","50100MKT D700","2026/03/16 0:00:00","0","185","0","94","MKT","AF","155" +"2026/03/14 16:55:14","64","マルチ","50100MKT D700","2026/03/17 0:00:00","0","187","0","98","MKT","AF","155" +"2026/03/14 16:55:14","64","マルチ","50100MKT D700","2026/03/18 0:00:00","0","101","0","87","MKT","AF","155" +"2026/03/14 16:55:14","64","マルチ","50100MKT D700","2026/03/19 0:00:00","0","132","0","96","MKT","AF","155" +"2026/03/14 16:55:14","64","マルチ","50100MKT D700","2026/03/20 0:00:00","0","184","0","99","MKT","AF","155" +"2026/03/14 16:55:14","64","マルチ","50100MKT D700","2026/03/21 0:00:00","0","61","0","95","MKT","AF","155" +"2026/03/14 16:55:14","64","マルチ","50100MKT D700","2026/03/23 0:00:00","0","79","0","90","MKT","AF","155" +"2026/03/14 16:55:14","64","マルチ","50100MKT D700","2026/03/24 0:00:00","0","52","0","96","MKT","AF","155" +"2026/03/14 16:55:14","64","マルチ","50100MKT D700","2026/03/25 0:00:00","0","71","0","89","MKT","AF","155" +"2026/03/14 16:55:14","64","マルチ","50100MKT D700","2026/03/26 0:00:00","0","82","0","93","MKT","AF","155" +"2026/03/14 16:55:14","64","マルチ","50100MKW D700","2026/03/21 0:00:00","0","66","0","95","MKW","","0" +"2026/03/14 16:55:14","64","マルチ","50100MKW D700","2026/03/23 0:00:00","0","77","0","90","MKW","","0" +"2026/03/14 16:55:14","64","マルチ","50100MKW D700","2026/03/24 0:00:00","0","77","0","96","MKW","","0" +"2026/03/14 16:55:14","64","マルチ","50100MKW D700","2026/03/25 0:00:00","0","81","0","89","MKW","","0" +"2026/03/14 16:55:14","64","マルチ","50100MKW D700","2026/03/26 0:00:00","0","81","0","93","MKW","","0" +"2026/03/14 16:55:14","64","マルチ","50100MKW D700","2026/03/27 0:00:00","0","82","0","81","MKW","","0" +"2026/03/14 16:55:14","64","マルチ","50100K88 B500","2026/03/16 0:00:00","0","130","0","94","K88","","0" +"2026/03/14 16:55:14","64","マルチ","50100K88 B500","2026/03/17 0:00:00","0","140","0","98","K88","","0" +"2026/03/14 16:55:14","64","マルチ","50100K88 B500","2026/03/18 0:00:00","0","200","0","87","K88","","0" +"2026/03/14 16:55:14","64","マルチ","50100K88 B500","2026/03/19 0:00:00","0","200","0","96","K88","","0" +"2026/03/14 16:55:14","64","マルチ","50100K88 B500","2026/03/20 0:00:00","0","150","0","99","K88","","0" +"2026/03/14 16:55:14","64","マルチ","50100K88 B500","2026/03/21 0:00:00","0","200","0","95","K88","","0" +"2026/03/14 16:55:14","64","マルチ","50100K88 B500","2026/03/23 0:00:00","0","150","0","90","K88","","0" +"2026/03/14 16:55:14","64","マルチ","50100K88 B500","2026/03/24 0:00:00","0","200","0","96","K88","","0" +"2026/03/14 16:55:14","64","マルチ","50100K88 B500","2026/03/25 0:00:00","0","150","0","89","K88","","0" +"2026/03/14 16:55:14","64","マルチ","50100K88 B500","2026/03/26 0:00:00","0","150","0","93","K88","","0" +"2026/03/14 16:55:14","64","マルチ","50100K88 B500","2026/03/27 0:00:00","0","200","0","81","K88","","0" +"2026/03/14 16:55:14","65","MC","50100MFP JD00","2026/03/16 0:00:00","0","15","0","99","MFP","AF","294" +"2026/03/14 16:55:14","65","MC","50100MFP JD00","2026/03/19 0:00:00","0","15","0","91","MFP","AF","294" +"2026/03/14 16:55:14","65","MC","50100MFP JD00","2026/03/21 0:00:00","0","15","0","90","MFP","AF","294" +"2026/03/14 16:55:14","65","MC","50100MFP JD00","2026/03/24 0:00:00","0","14","0","94","MFP","AF","294" +"2026/03/14 16:55:14","65","MC","50100MFP JD00","2026/03/25 0:00:00","0","14","0","82","MFP","AF","294" +"2026/03/14 16:55:14","65","MC","50100MFP JC00","2026/03/17 0:00:00","0","16","0","96","MFP","AF","294" +"2026/03/14 16:55:14","65","MC","50100MFP JC00","2026/03/20 0:00:00","0","15","0","86","MFP","AF","294" +"2026/03/14 16:55:14","65","MC","50100MFP JC00","2026/03/23 0:00:00","0","15","0","100","MFP","AF","294" +"2026/03/14 16:55:14","65","MC","50100MKS E000","2026/03/16 0:00:00","0","30","0","99","MKS","AF","160" +"2026/03/14 16:55:14","65","MC","50100MKS E000","2026/03/17 0:00:00","0","60","0","96","MKS","AF","160" +"2026/03/14 16:55:14","65","MC","50100KSE 0000","2026/03/16 0:00:00","0","72","0","99","KSE","AF","0" +"2026/03/14 16:55:14","65","MC","50100KSE 0000","2026/03/17 0:00:00","0","72","0","96","KSE","AF","0" +"2026/03/14 16:55:14","65","MC","50100KSE 0000","2026/03/18 0:00:00","0","72","0","72","KSE","AF","0" +"2026/03/14 16:55:14","65","MC","50100KSE 0000","2026/03/20 0:00:00","0","72","0","86","KSE","AF","0" +"2026/03/14 16:55:14","65","MC","50100KSE 0000","2026/03/21 0:00:00","0","70","0","90","KSE","AF","0" +"2026/03/14 16:55:14","65","MC","50100KSE 0000","2026/03/23 0:00:00","0","56","0","100","KSE","AF","0" +"2026/03/14 16:55:14","65","MC","50100KSE 0000","2026/03/24 0:00:00","0","47","0","94","KSE","AF","0" +"2026/03/14 16:55:14","65","MC","50100MKT D700","2026/03/18 0:00:00","0","90","0","72","MKT","AF","131" +"2026/03/14 16:55:14","65","MC","50100MKT D700","2026/03/19 0:00:00","0","60","0","91","MKT","AF","131" +"2026/03/14 16:55:14","65","MC","50100MKT D700","2026/03/21 0:00:00","0","120","0","90","MKT","AF","131" +"2026/03/14 16:55:14","65","MC","50100MKT D700","2026/03/23 0:00:00","0","90","0","100","MKT","AF","131" +"2026/03/14 16:55:14","65","MC","50100MKT D700","2026/03/24 0:00:00","0","120","0","94","MKT","AF","131" +"2026/03/14 16:55:14","65","MC","50100MKT D700","2026/03/25 0:00:00","0","90","0","82","MKT","AF","131" +"2026/03/14 16:55:14","65","MC","50100MKT D700","2026/03/26 0:00:00","0","90","0","82","MKT","AF","131" +"2026/03/14 16:55:14","65","MC","50100MLA AA00","2026/03/16 0:00:00","0","89","0","99","MLA","AF","167" +"2026/03/14 16:55:14","65","MC","50100MLA AA00","2026/03/17 0:00:00","0","54","0","96","MLA","AF","167" +"2026/03/14 16:55:14","65","MC","50100MLA AA00","2026/03/18 0:00:00","0","35","0","72","MLA","AF","167" +"2026/03/14 16:55:14","65","MC","50100MLA AA00","2026/03/19 0:00:00","0","59","0","91","MLA","AF","167" +"2026/03/14 16:55:14","65","MC","50100MLA AA00","2026/03/20 0:00:00","0","99","0","86","MLA","AF","167" +"2026/03/14 16:55:14","65","MC","50100MLA AA00","2026/03/21 0:00:00","0","11","0","90","MLA","AF","167" +"2026/03/14 16:55:14","65","MC","50100MLA AA00","2026/03/23 0:00:00","0","49","0","100","MLA","AF","167" +"2026/03/14 16:55:14","65","MC","50100MLA AA00","2026/03/24 0:00:00","0","19","0","94","MLA","AF","167" +"2026/03/14 16:55:14","65","MC","50100MLA AA00","2026/03/25 0:00:00","0","24","0","82","MLA","AF","167" +"2026/03/14 16:55:14","65","MC","50100MLA AA00","2026/03/26 0:00:00","0","49","0","82","MLA","AF","167" +"2026/03/14 16:55:14","65","MC","50100MLA AA00","2026/03/27 0:00:00","0","70","0","48","MLA","AF","167" +"2026/03/14 16:55:14","66","溶接1","50100MKS E000","2026/03/16 0:00:00","0","82","0","94","MKS","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MKS E000","2026/03/17 0:00:00","0","52","0","100","MKS","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MKS E000","2026/03/18 0:00:00","0","99","0","94","MKS","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MKS E000","2026/03/19 0:00:00","0","112","0","95","MKS","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MKS E000","2026/03/20 0:00:00","0","112","15","99","MKS","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MKS E000","2026/03/21 0:00:00","0","112","15","96","MKS","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MKS E000","2026/03/23 0:00:00","0","143","0","94","MKS","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MKS E000","2026/03/24 0:00:00","0","127","0","97","MKS","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MKS E000","2026/03/25 0:00:00","0","82","0","97","MKS","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MKS E000","2026/03/26 0:00:00","0","97","0","97","MKS","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MKS E000","2026/03/27 0:00:00","0","70","0","34","MKS","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLF E800","2026/03/18 0:00:00","0","25","0","94","MLF","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLF E800","2026/03/19 0:00:00","0","52","0","95","MLF","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLF E800","2026/03/20 0:00:00","0","26","0","99","MLF","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLF E800","2026/03/21 0:00:00","0","25","0","96","MLF","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLF E800","2026/03/23 0:00:00","0","27","0","94","MLF","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLF E800","2026/03/24 0:00:00","0","25","0","97","MLF","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLF E800","2026/03/25 0:00:00","0","27","0","97","MLF","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLF E800","2026/03/26 0:00:00","0","29","0","97","MLF","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLZ E900","2026/03/18 0:00:00","0","16","0","94","MLZ","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLL DA00","2026/03/17 0:00:00","0","32","0","100","MLL","AF","180" +"2026/03/14 16:55:14","66","溶接1","50100MLV J000","2026/03/21 0:00:00","0","10","0","96","MLV","AF","150" +"2026/03/14 16:55:14","66","溶接1","50100MLV J000","2026/03/23 0:00:00","0","15","0","94","MLV","AF","150" +"2026/03/14 16:55:14","66","溶接1","50100MLV J000","2026/03/24 0:00:00","0","30","0","97","MLV","AF","150" +"2026/03/14 16:55:14","66","溶接1","50100MLV J000","2026/03/25 0:00:00","0","40","0","97","MLV","AF","150" +"2026/03/14 16:55:14","66","溶接1","50100MLV J000","2026/03/26 0:00:00","0","50","0","97","MLV","AF","150" +"2026/03/14 16:55:14","66","溶接1","50100MLV J000","2026/03/27 0:00:00","0","15","0","34","MLV","AF","150" +"2026/03/14 16:55:14","66","溶接1","50100MLB D800","2026/03/16 0:00:00","0","76","0","94","MLB","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLB D800","2026/03/17 0:00:00","0","116","0","100","MLB","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLB D800","2026/03/18 0:00:00","0","52","0","94","MLB","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLB D800","2026/03/20 0:00:00","0","98","0","99","MLB","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLB D800","2026/03/21 0:00:00","0","56","0","96","MLB","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLB D800","2026/03/23 0:00:00","0","62","0","94","MLB","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLB D800","2026/03/24 0:00:00","0","70","0","97","MLB","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLB D800","2026/03/25 0:00:00","0","120","0","97","MLB","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLB D800","2026/03/26 0:00:00","0","91","0","97","MLB","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLC D300","2026/03/20 0:00:00","0","10","0","99","MLC","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLC D300","2026/03/21 0:00:00","0","13","0","96","MLC","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLC D300","2026/03/16 0:00:00","0","0","30","94","MLC","KD","130" +"2026/03/14 16:55:14","66","溶接1","50100MLC D300","2026/03/19 0:00:00","0","0","30","95","MLC","KD","130" +"2026/03/14 16:55:14","66","溶接1","50100MLC D600","2026/03/16 0:00:00","0","165","0","94","MLC","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLC D600","2026/03/17 0:00:00","0","163","0","100","MLC","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLC D600","2026/03/18 0:00:00","0","159","0","94","MLC","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLC D600","2026/03/19 0:00:00","0","161","0","95","MLC","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLC D600","2026/03/20 0:00:00","0","112","0","99","MLC","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLC D600","2026/03/21 0:00:00","0","126","0","96","MLC","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLC D600","2026/03/23 0:00:00","0","105","0","94","MLC","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLC D600","2026/03/24 0:00:00","0","108","0","97","MLC","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLC D600","2026/03/25 0:00:00","0","89","0","97","MLC","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLC D600","2026/03/26 0:00:00","0","90","0","97","MLC","AF","130" +"2026/03/14 16:55:14","66","溶接1","50100MLC D600","2026/03/27 0:00:00","0","42","0","34","MLC","AF","130" diff --git a/docs/000 受領物/20260316_瀧様(新書式でWEが出てない)/20260316_結果@小佐井さんへ.xlsx b/docs/000 受領物/20260316_瀧様(新書式でWEが出てない)/20260316_結果@小佐井さんへ.xlsx new file mode 100644 index 0000000..af41bb6 Binary files /dev/null and b/docs/000 受領物/20260316_瀧様(新書式でWEが出てない)/20260316_結果@小佐井さんへ.xlsx differ diff --git a/docs/000 受領物/20260316_瀧様(新書式でWEが出てない)/★【2026 3月 前倒し込み負荷 2W確定】溶接鉄フレーム生産計画_2026_0221 1.xlsm b/docs/000 受領物/20260316_瀧様(新書式でWEが出てない)/★【2026 3月 前倒し込み負荷 2W確定】溶接鉄フレーム生産計画_2026_0221 1.xlsm new file mode 100644 index 0000000..52bd56e Binary files /dev/null and b/docs/000 受領物/20260316_瀧様(新書式でWEが出てない)/★【2026 3月 前倒し込み負荷 2W確定】溶接鉄フレーム生産計画_2026_0221 1.xlsm differ diff --git a/docs/000 受領物/20260401_中村様(SP仕様とデータ)/SP計画2026-02_仕様書_v2.xlsx b/docs/000 受領物/20260401_中村様(SP仕様とデータ)/SP計画2026-02_仕様書_v2.xlsx new file mode 100644 index 0000000..b63730e Binary files /dev/null and b/docs/000 受領物/20260401_中村様(SP仕様とデータ)/SP計画2026-02_仕様書_v2.xlsx differ diff --git a/docs/000 受領物/20260401_中村様(SP仕様とデータ)/SP計画2026-03.xlsx b/docs/000 受領物/20260401_中村様(SP仕様とデータ)/SP計画2026-03.xlsx new file mode 100644 index 0000000..e0defe6 Binary files /dev/null and b/docs/000 受領物/20260401_中村様(SP仕様とデータ)/SP計画2026-03.xlsx differ diff --git a/docs/010 設計書/【溶接加工向けデータ連携ツール】マニュアル_20251119A_破損?.xlsx b/docs/010 設計書/【溶接加工向けデータ連携ツール】マニュアル_20251119A_破損?.xlsx new file mode 100644 index 0000000..ae1fb5d Binary files /dev/null and b/docs/010 設計書/【溶接加工向けデータ連携ツール】マニュアル_20251119A_破損?.xlsx differ diff --git a/docs/010 設計書/【溶接加工向けデータ連携ツール】マニュアル_20260213A.xlsx b/docs/010 設計書/【溶接加工向けデータ連携ツール】マニュアル_20260213A.xlsx new file mode 100644 index 0000000..4f15d9c Binary files /dev/null and b/docs/010 設計書/【溶接加工向けデータ連携ツール】マニュアル_20260213A.xlsx differ diff --git a/docs/040 テスト仕様書/20251022中村様新書式.xlsx b/docs/040 テスト仕様書/20251022中村様新書式.xlsx new file mode 100644 index 0000000..3a3b6cb Binary files /dev/null and b/docs/040 テスト仕様書/20251022中村様新書式.xlsx differ diff --git a/docs/040 テスト仕様書/20260120_新共通書式対応.xlsx b/docs/040 テスト仕様書/20260120_新共通書式対応.xlsx new file mode 100644 index 0000000..3e3e380 Binary files /dev/null and b/docs/040 テスト仕様書/20260120_新共通書式対応.xlsx differ diff --git a/docs/040 テスト仕様書/【溶接加工向けデータ連携ツール】単体試験仕様書・成績書_20251106A.xlsx b/docs/040 テスト仕様書/【溶接加工向けデータ連携ツール】単体試験仕様書・成績書_20251106A.xlsx new file mode 100644 index 0000000..e6dfab7 Binary files /dev/null and b/docs/040 テスト仕様書/【溶接加工向けデータ連携ツール】単体試験仕様書・成績書_20251106A.xlsx differ diff --git a/docs/040 テスト仕様書/検証用:102期生産計画MC上期.xlsx b/docs/040 テスト仕様書/検証用:102期生産計画MC上期.xlsx new file mode 100644 index 0000000..356935b Binary files /dev/null and b/docs/040 テスト仕様書/検証用:102期生産計画MC上期.xlsx differ diff --git a/docs/040 テスト仕様書/検証用:102期生産計画マルチ上期.xlsx b/docs/040 テスト仕様書/検証用:102期生産計画マルチ上期.xlsx new file mode 100644 index 0000000..8424a7d Binary files /dev/null and b/docs/040 テスト仕様書/検証用:102期生産計画マルチ上期.xlsx differ diff --git a/docs/050 バッチ/CsvToDb.bat b/docs/050 バッチ/CsvToDb.bat new file mode 100644 index 0000000..df95e62 --- /dev/null +++ b/docs/050 バッチ/CsvToDb.bat @@ -0,0 +1 @@ +c:\aaa\bbb\ExcelToCsvToDb.exe /CsvToDbWeOrder diff --git a/docs/050 バッチ/ExcelToCsv.bat b/docs/050 バッチ/ExcelToCsv.bat new file mode 100644 index 0000000..71d2fc5 --- /dev/null +++ b/docs/050 バッチ/ExcelToCsv.bat @@ -0,0 +1 @@ +c:\aaa\bbb\ExcelToCsvToDb.exe /ExcelToCsvWeOrderMc diff --git a/docs/060 データ/20260310-163249_PoSpPlan_20260310_163249.csv b/docs/060 データ/20260310-163249_PoSpPlan_20260310_163249.csv new file mode 100644 index 0000000..311989f --- /dev/null +++ b/docs/060 データ/20260310-163249_PoSpPlan_20260310_163249.csv @@ -0,0 +1,622 @@ +PlanCd,HaraiMoto,HaraiSaki,ModelCd,SeppenBuban,TargetColor,KakoColor,Biko,Buhinmei,KoteiCd,SeisanHiduke,Daisu,SpBuban +"K*SP**","PO","AF","K88","53215K88 J000 03","NH388","NH388","スタンダード","COVER ASSY,HNDL UPPER","1521","2026/02/20","10","53215K88J00ZD" +"K*SP**","PO","AF","K88","53215K88 J000 03","PB394M","PB394M","スタンダード","COVER ASSY,HNDL UPPER","1521","2026/02/06","20","53215K88J00ZC" +"K*SP**","PO","AF","K88","53215K88 J000 03","Y124P","Y124P","スタンダード","COVER ASSY,HNDL UPPER","1521","2026/02/19","10","53215K88J00ZA" +"K*SP**","PO","AF","K88","53215K88 J000 03","Y163P","Y163P","スタンダード","COVER ASSY,HNDL UPPER","1521","2026/02/09","5","53215K88J00ZK" +"K*SP**","PO","AF","MKA1.3","61100MGS D301 02","NHB01","NHB01","1・3型","FENDER COMP,FR","1521","2026/02/04","25","61100MGSD30ZF" +"K*SP**","PO","AF","K88","61500K88 J001","Y163P","Y163P","スタンダード","COVER ASSY,R FR FORK","1521","2026/02/06","5","61500K88J00ZL" +"K*SP**","PO","AF","K88","61500K88 J001","YR211","YR211","スタンダード","COVER ASSY,R FR FORK","1521","2026/02/18","10","61500K88J00ZB" +"K*SP**","PO","AF","K88","61600K88 J001","Y163P","Y163P","スタンダード","COVER ASSY,L FR FORK","1521","2026/02/09","10","61600K88J00ZL" +"K*SP**","PO","AF","K88","61600K88 J001","YR211","YR211","スタンダード","COVER ASSY,L FR FORK","1521","2026/02/19","10","61600K88J00ZB" +"K*SP**","PO","AF","MKYJ","64100MKY E000","NHA86M","NHA86M","MKY E000AA","COWL COMP,FR UPPER","1521","2026/02/19","5","64100MKYE00ZB" +"K*SP**","PO","AF","MLA","64205MLA A301 01","NHC65M","NHC65M","0","COWL ASSY,FR","1521","2026/02/12","15","64205MLAA30ZD" +"K*SP**","PO","AF","MLA","64300MLA AH00 02","NHC47P","NHC47P","","COWL ASSY,HEAD LIGHT","1521","2026/02/09","20","64300MLAAH0ZD" +"K*SP**","PO","AF","MLN4","64300MLN ER00","NHC64M","NHC64M","4型 8A ストのみ","COWL ASSY,R MIDDLE","1521","2026/02/06","15","64300MLNER0ZA" +"K*SP**","PO","AF","MLN4","64300MLN ET00 01","NHB53P","NHB53P","4型 8A+7B ラバーなし","COWL ASSY,R MIDDLE","1521","2026/02/19","15","64300MLNET0ZA" +"K*SP**","PO","AF","MLL","64335MLL D000 01","TYPE4","NHA86M","8A","COVER ASSY,R FUEL TANK","1521","2026/02/02","15","64335MLLD00ZA" +"K*SP**","PO","AF","MKC","81200MKC A102","NHB70M","NHB70M","IN LID + TL_OLD","LID ASSY,TRUNK","1521","2026/02/09","10","81200MKCA10ZA" +"K*SP**","PO","AF","MKC","81200MKC L301","NHA86M","NHA86M","7B (IN LID + 2TL +R/L TL CVR)","LID ASSY,TRUNK(NEW)","1521","2026/02/02","5","81200MKCL30ZA" +"K*SP**","PO","AF","MKC","81200MKC LG00","NHC33P","NHC33P","7B (IN LID + 2TL +R/L TL CVR)","LID ASSY,TRUNK(NEW)","1521","2026/02/12","10","81200MKCLG0ZB" +"K*SP**","PO","AF","MKC","81200MKC LG00","NHC33P","NHC33P","7B (IN LID + 2TL +R/L TL CVR)","LID ASSY,TRUNK(NEW)","1521","2026/02/13","10","81200MKCLG0ZB" +"K*SP**","PO","AF","MKC","81200MKC LG00","NHC33P","NHC33P","7B (IN LID + 2TL +R/L TL CVR)","LID ASSY,TRUNK(NEW)","1521","2026/02/16","10","81200MKCLG0ZB" +"K*SP**","PO","AF","MKC","81200MKC LG00","NHC33P","NHC33P","7B (IN LID + 2TL +R/L TL CVR)","LID ASSY,TRUNK(NEW)","1521","2026/02/17","10","81200MKCLG0ZB" +"K*SP**","PO","AF","MKC","81200MKC LG00","NHC33P","NHC33P","7B (IN LID + 2TL +R/L TL CVR)","LID ASSY,TRUNK(NEW)","1521","2026/02/18","10","81200MKCLG0ZB" +"K*SP**","PO","AF","MLA","81300MLA A300 08","NHC65M","NHC65M","LID + PANEL","SADDLEBAG ASSY,R","1521","2026/02/16","16","81300MLAA30ZC" +"K*SP**","PO","AF","MLA","81400MLA A300 08","NHC65M","NHC65M","LID + PANEL","SADDLEBAG ASSY,L","1521","2026/02/17","20","81400MLAA30ZC" +"K*SP**","PO","AF","MKC","81560MKC A102","NH463M","NH463M","7B (CTR+INN+END)","COVER ASSY,CTR RR TOP","1521","2026/02/04","5","81560MKCA10ZH" +"K*SP**","PO","AF","MKC","81560MLJ A000","NHC65M","NHC65M","7B (CTR+INN+END)","COVER ASSY,CTR RR TOP","1521","2026/02/05","5","81560MLJA00ZB" +"K*SP**","PO","AF","MKC","83105MLJ M000","TYPE1","NHA30M","7B","LID ASSY,FUEL","1521","2026/02/06","5","83105MLJM00ZA" +"K*SP**","PO","AF","MKC","83210MKC A002","TYPE4","NHB70M","LID + BUTTON","CENTER POCKET ASSY","1521","2026/02/09","5","83210MKCA00ZF" +"K*SP**","PO","AF","MLN1","83600MLN E300 02","TYPE2","NHB53P","1型 8A+7B","COWL ASSY,R RR SIDE","1521","2026/02/19","5","83600MLNE30ZA" +"K*SP**","PO","AF","GAG","64300GFZ J000 02","NH138","NH138","0","COVER,SET ILLUST FRONT","1521","2026/02/04","30","64300GFZJ00ZA" +"K*SP**","PO","AF","KSE","80010KSE 3060","TYPE1","R292R","0","FENDER SET ILLUST,REAR","1521","2026/02/03","8","80010KSE306ZA" +"K*SP**","PO","AF","KSE","80010KSE 3060","TYPE1","R292R","0","FENDER SET ILLUST,REAR","1521","2026/02/18","7","80010KSE306ZA" +"K*SP**","PO","AF","KSE","80101KSE A301","TYPE1","R292R","0","SET ILLUST,REAR FENDER","1521","2026/02/03","15","80101KSEA30ZA" +"K*SP**","PO","AF","KSE","80101KSE A301","TYPE1","R292R","0","SET ILLUST,REAR FENDER","1521","2026/02/18","15","80101KSEA30ZA" +"K*SP**","PO","AF","MKC","81100MKC L310","","","BOX LWR + BOX UPR","TRUNK SUB ASSY","1521","2026/02/09","25","81100MKCL31" +"K*SP**","PO","AF","MKC","81100MKC L310","","","BOX LWR + BOX UPR","TRUNK SUB ASSY","1521","2026/02/25","5","81100MKCL31" +"K*SP**","PO","AF","K88","83701K88 L203 01","T23","T23","スタンダード","COVER COMP,L BODY","1521","2026/02/04","5","83701K88L20ZA" +"K*SP**","PO","SP","KSE","19071KSE V100","TYPE1","R292R","","SET ILLUST,R TANK SHROUD","1513","2026/02/16","5","19071KSEV10ZA" +"K*SP**","PO","SP","MCT","50611MEF J000AB","","SOZAI","教習車","SKIRT R RLOOR(KAKOU)","1513","2026/02/25","5","50611MEFJ00AB" +"K*SP**","PO","SP","MKE","51710MKE AU00","TYPE1","R292R","0","SET ILLUS,R FR FORK PROTECTOR","1513","2026/02/17","5","51710MKEAU0ZA" +"K*SP**","PO","SP","KVZ","61100KVZ 6300AA","","SOZAI","0","FRONT FENDER(SOZAI)","1513","2026/02/26","5","61100KVZ630AA" +"K*SP**","PO","SP","MFL","61100MFL 0000AB","","SOZAI","0","FENDER FRONT(SANDING)","1513","2026/02/03","5","61100MFL000AB" +"K*SP**","PO","SP","MKA1.3","61100MGS D302AB","","SOZAI","1・3型","FENDER FR(SANDING)","1513","2026/02/02","40","61100MGSD30AB" +"K*SP**","PO","SP","MKA1.3","61100MGS D302AB","","SOZAI","1・3型","FENDER FR(SANDING)","1513","2026/02/03","25","61100MGSD30AB" +"K*SP**","PO","SP","MCA","61101MCA 0000AB","","SOZAI","0","FENDER,FR(SANDING)","1513","2026/02/03","5","61101MCA000AB" +"K*SP**","PO","SP","MCA","61103MCA 0000AB","","SOZAI","0","FENDER,FR,B(SANDING)","1513","2026/02/09","40","61103MCA000AB" +"K*SP**","PO","SP","MCA","61103MCA A80120","","SOZAI","ABS","FENDER","1513","2026/02/26","5","61103MCAA8020" +"K*SP**","PO","SP","HP1","61110HP1 60002101","NH196","NH196","0","SHROUD,R","1513","2026/02/23","40","61110HP1600ZC" +"K*SP**","PO","SP","HP1","61120HP1 60002101","NH196","NH196","0","FENDER,R","1513","2026/02/24","40","61120HP1600ZC" +"K*SP**","PO","SP","V61","61151V61 J000 01","","","0","COVER,MOTOR","1513","2026/02/12","10","61151V61J00" +"K*SP**","PO","SP","V61","61151V61 J000 01","","","0","COVER,MOTOR","1513","2026/02/13","10","61151V61J00" +"K*SP**","PO","SP","MW3","61301MW3 A900","NH1","NH1","MFM","CASE HEAD LIGHT","1513","2026/02/09","15","61301MW3A90ZA" +"K*SP**","PO","SP","MCA","64110MCA S400AB","","SOZAI","0","GARNISH SCREEN(SANDING)","1513","2026/02/19","10","64110MCAS40AB" +"K*SP**","PO","SP","MKC","64110MKC A000AB","","SOZAI","","GARNISH A,SCREEN(SANDING)","1513","2026/02/26","25","64110MKCA00AB" +"K*SP**","PO","SP","MKV","64111MKV D000AA","","SOZAI","0","COWL,FRONT(SOZAI)","1513","2026/02/20","5","64111MKVD00AA" +"K*SP**","PO","SP","MGE","64130MGE 0000AB","","SOZAI","0","COWL R UPPER SIDE(SANDING)","1513","2026/02/11","5","64130MGE000AB" +"K*SP**","PO","SP","MJR","64160MJR 6700AB","","SOZAI","0","COVER L FORK FR(SANDING)","1513","2026/02/16","5","64160MJR670AB" +"K*SP**","PO","SP","MGP","64211MGP D000AB","","SOZAI","0","COWL UPPER(SANDING)","1513","2026/02/17","5","64211MGPD00AB" +"K*SP**","PO","SP","MKT","64211MKT D000AB","","SOZAI","D000AA 旧型","COWL,UPPER(SANDING)","1513","2026/02/20","25","64211MKTD00AB" +"K*SP**","PO","SP","MLB","64215MLB D000AB","","SOZAI","","COWL R,HEAD LIGHT SIDE(SANDING)","1513","2026/02/25","10","64215MLBD00AB" +"K*SP**","PO","SP","MCA","64216MCA 0000AA","","SOZAI","0","COWL,FR CENTER(SOZAI)","1513","2026/02/25","5","64216MCA000AA" +"K*SP**","PO","SP","GAG","64220GAG 7512","NH187R","NH187R","0","ROOF","1513","2026/02/04","30","64220GAG751ZB" +"K*SP**","PO","SP","GAG","64220GAG 7512","NH187R","NH187R","0","ROOF","1513","2026/02/05","30","64220GAG751ZB" +"K*SP**","PO","SP","MKV","64221MKV D000AA","","SOZAI","0","COVER,FR INNER(SOZAI)","1513","2026/02/20","5","64221MKVD00AA" +"K*SP**","PO","SP","MLB","64225MLB D000AB","","SOZAI","","COWL L,HEAD LIGHT SIDE(SANDING)","1513","2026/02/12","15","64225MLBD00AB" +"K*SP**","PO","SP","MFM","64231MFM C300AB","","SOZAI","J000AA","COWL,L SIDE(SANDING)","1513","2026/02/16","5","64231MFMC30AB" +"K*SP**","PO","SP","MKH","64280MKH D000AB","","SOZAI","0","DUCT,R AIR(SANDING)","1513","2026/02/25","10","64280MKHD00AB" +"K*SP**","PO","SP","MCA","64285MCA S400AB","","SOZAI","0","COWL R MIDDLE(SANDING)","1513","2026/02/13","15","64285MCAS40AB" +"K*SP**","PO","SP","MCA","64285MCA S400AB","","SOZAI","0","COWL R MIDDLE(SANDING)","1513","2026/02/16","5","64285MCAS40AB" +"K*SP**","PO","SP","MGS3","64290MGS D304AB","","SOZAI","旧3型","DUCT,L AIR(SANDING)","1513","2026/02/03","5","64290MGSD30AB" +"K*SP**","PO","SP","MCA","64292MCA S400AB","","SOZAI","0","COWL L SIDE(SANDING)","1513","2026/02/18","10","64292MCAS40AB" +"K*SP**","PO","SP","MCA","64295MCA S400AB","","SOZAI","0","COWL L MIDDLE(SANDING)","1513","2026/02/17","10","64295MCAS40AB" +"K*SP**","PO","SP","GGZ","64301GGZ J001AA","","SOZAI","0","COVER,FR(SOZAI)","1513","2026/02/10","10","64301GGZJ00AA" +"K*SP**","PO","SP","GJA","64301GJA J000AA","","SOZAI","0","COVER,FR(SOZAI)","1513","2026/02/10","45","64301GJAJ00AA" +"K*SP**","PO","SP","GJB","64301GJB J000AA","","SOZAI","0","COVER FR(SOZAI)","1513","2026/02/16","50","64301GJBJ00AA" +"K*SP**","PO","SP","GJB","64301GJB J000AA","","SOZAI","0","COVER FR(SOZAI)","1513","2026/02/17","50","64301GJBJ00AA" +"K*SP**","PO","SP","GJB","64301GJB J000AA","","SOZAI","0","COVER FR(SOZAI)","1513","2026/02/18","50","64301GJBJ00AA" +"K*SP**","PO","SP","GJB","64301GJB J000AA","","SOZAI","0","COVER FR(SOZAI)","1513","2026/02/19","45","64301GJBJ00AA" +"K*SP**","PO","SP","GX1","64301GX1 J000AA","","SOZAI","","COVER FR(SOZAI)","1513","2026/02/02","25","64301GX1J00AA" +"K*SP**","PO","SP","GX1","64301GX1 J000AA","","SOZAI","","COVER FR(SOZAI)","1513","2026/02/03","50","64301GX1J00AA" +"K*SP**","PO","SP","GX1","64301GX1 J000AA","","SOZAI","","COVER FR(SOZAI)","1513","2026/02/04","50","64301GX1J00AA" +"K*SP**","PO","SP","GX1","64301GX1 J000AA","","SOZAI","","COVER FR(SOZAI)","1513","2026/02/05","50","64301GX1J00AA" +"K*SP**","PO","SP","GX1","64301GX1 J000AA","","SOZAI","","COVER FR(SOZAI)","1513","2026/02/06","50","64301GX1J00AA" +"K*SP**","PO","SP","GX1","64301GX1 J000AA","","SOZAI","","COVER FR(SOZAI)","1513","2026/02/09","50","64301GX1J00AA" +"K*SP**","PO","SP","K88","64301K88 J000AA","","SOZAI","スタンダード","COVER,FRONT(SOZAI)","1513","2026/02/09","5","64301K88J00AA" +"K*SP**","PO","SP","MCT","64301MCT 0000AA","","SOZAI","0","COVER,FR (SOZAI)","1513","2026/02/12","8","64301MCT000AA" +"K*SP**","PO","SP","MCT","64301MCT 0000AA","","SOZAI","0","COVER,FR (SOZAI)","1513","2026/02/13","7","64301MCT000AA" +"K*SP**","PO","SP","MFT","64301MFT 6400AA","","SOZAI","0","COVER FRONT(SOZAI)","1513","2026/02/24","5","64301MFT640AA" +"K*SP**","PO","SP","GJB","64303GJB J000AA","","SOZAI","0","COVER,FR TOP(SOZAI)","1513","2026/02/04","10","64303GJBJ00AA" +"K*SP**","PO","SP","GX1","64303GX1 J000AA","","SOZAI","0","COVER FR TOP(SOZAI)","1513","2026/02/02","20","64303GX1J00AA" +"K*SP**","PO","SP","GX1","64303GX1 J000AA","","SOZAI","0","COVER FR TOP(SOZAI)","1513","2026/02/03","20","64303GX1J00AA" +"K*SP**","PO","SP","GX1","64303GX1 J000AA","","SOZAI","0","COVER FR TOP(SOZAI)","1513","2026/02/04","20","64303GX1J00AA" +"K*SP**","PO","SP","GX1","64303GX1 J000AA","","SOZAI","0","COVER FR TOP(SOZAI)","1513","2026/02/05","20","64303GX1J00AA" +"K*SP**","PO","SP","GX1","64303GX1 J000AA","","SOZAI","0","COVER FR TOP(SOZAI)","1513","2026/02/06","10","64303GX1J00AA" +"K*SP**","PO","SP","MGH","64310MGH 6400AB","","SOZAI","0","COWL R MIDDLE(SANDING)","1513","2026/02/06","15","64310MGH640AB" +"K*SP**","PO","SP","MGP","64310MGP D000AB","","SOZAI","0","COWL,R MIDDLE(SANDING)","1513","2026/02/17","5","64310MGPD00AB" +"K*SP**","PO","SP","MFT","64311MFT 6600","NH1","NH1","教習車用","COVER,INNER","1513","2026/02/24","5","64311MFT660ZA" +"K*SP**","PO","SP","MKK","64311MKK D200AB","","SOZAI","0","COWL R,MIDDLE(SANDING)","1513","2026/02/24","15","64311MKKD20AB" +"K*SP**","PO","SP","MKS1","64311MKS E000AB","","SOZAI","","COWL R,MIDDLE(SANDING)","1513","2026/02/25","5","64311MKSE00AB" +"K*SP**","PO","SP","MKS2","64311MKS E200AB","","SOZAI","","COWL R,MIDDLE(SANDING)","1513","2026/02/18","5","64311MKSE20AB" +"K*SP**","PO","SP","MKV","64311MKV D000AB","","SOZAI","","COWL,R FRONT SIDE(SANDING)","1513","2026/02/09","20","64311MKVD00AB" +"K*SP**","PO","SP","MKV","64311MKV D000AB","","SOZAI","","COWL,R FRONT SIDE(SANDING)","1513","2026/02/10","20","64311MKVD00AB" +"K*SP**","PO","SP","MLF","64311MLF E000AB","","SOZAI","","COWL,R MIDDLE COWL(SANDING)","1513","2026/02/23","15","64311MLFE00AB" +"K*SP**","PO","SP","MLF","64311MLF E000AB","","SOZAI","","COWL,R MIDDLE COWL(SANDING)","1513","2026/02/24","20","64311MLFE00AB" +"K*SP**","PO","SP","MKR","64312MKR D100AB","","SOZAI","","COWL,R MIDDLE(SANDING)","1513","2026/02/19","10","64312MKRD10AB" +"K*SP**","PO","SP","MKT","64313MKT D000AB","","SOZAI","D000AA 旧型","LID,POCKET(SANDING)","1513","2026/02/20","5","64313MKTD00AB" +"K*SP**","PO","SP","MKC","64315MKC A000AB","","SOZAI","","COWL R MIDDLE(SANDING)","1513","2026/02/02","15","64315MKCA00AB" +"K*SP**","PO","SP","MKH","64320MKH D000AB","","SOZAI","0","COWL,R SIDE(SANDING)","1513","2026/02/16","15","64320MKHD00AB" +"K*SP**","PO","SP","MGE","64321MGE 0000AB","","SOZAI","2次加工","COWL L MIDDLE(SANDING)","1513","2026/02/11","5","64321MGE000AB" +"K*SP**","PO","SP","MJM","64325MJM D000AB","","SOZAI","","COWL,L MIDDLE(SANDING)","1513","2026/02/04","5","64325MJMD00AB" +"K*SP**","PO","SP","MKC","64325MKC A000AB","","SOZAI","","COWL L,MIDDLE(SANDING)","1513","2026/02/03","15","64325MKCA00AB" +"K*SP**","PO","SP","MKW","64330MKW DB00","TYPE2","NHC99R","DB00","SET ILLUS,R MIDDLE COWL","1513","2026/02/23","5","64330MKWDB0ZA" +"K*SP**","PO","SP","MLB","64330MLB D000AB","","SOZAI","0","SHROUD R(SANDING)","1513","2026/02/12","30","64330MLBD00AB" +"K*SP**","PO","SP","MLB","64330MLB D000AB","","SOZAI","0","SHROUD R(SANDING)","1513","2026/02/13","30","64330MLBD00AB" +"K*SP**","PO","SP","MLB","64330MLB D000AB","","SOZAI","0","SHROUD R(SANDING)","1513","2026/02/16","15","64330MLBD00AB" +"K*SP**","PO","SP","MLRR","64330MLR Y800 01","","","","COVER ASSY,R TANK","1513","2026/02/10","5","64330MLRY80" +"K*SP**","PO","SP","MFT","64331MFT 6600AB","","SOZAI","教習車","PANEL R FLOOR SIDE(KAKOU)","1513","2026/02/23","5","64331MFT660AB" +"K*SP**","PO","SP","KVZ","64336KVZ K102","","","0","PANEL,FR METER","1513","2026/02/03","5","64336KVZK10" +"K*SP**","PO","SP","MKW","64340MKW DB00","TYPE2","NHC99R","DB00","SET ILLUS,L MIDDLE COWL","1513","2026/02/24","5","64340MKWDB0ZA" +"K*SP**","PO","SP","MLB","64340MLB D000AB","","SOZAI","","SHROUD L(SANDING)","1513","2026/02/19","30","64340MLBD00AB" +"K*SP**","PO","SP","MKW","64341MKW D000AB","","SOZAI","0","COWL A,L MIDDLE(SANDING)","1513","2026/02/03","5","64341MKWD00AB" +"K*SP**","PO","SP","MLC","64341MLC D000AB","","SOZAI","","COWL,R SIDE(SANDING)","1513","2026/02/06","10","64341MLCD00AB" +"K*SP**","PO","SP","MGH","64360MGH 6400AB","","SOZAI","0","COWL L MIDDLE(SANDING)","1513","2026/02/19","5","64360MGH640AB" +"K*SP**","PO","SP","MGP","64360MGP D000AB","","SOZAI","0","COWL L MIDDLE(SANDING)","1513","2026/02/18","5","64360MGPD00AB" +"K*SP**","PO","SP","MJC","64360MJC A001AB","","SOZAI","0","COWL,L MIDDLE(SANDING)","1513","2026/02/02","5","64360MJCA00AB" +"K*SP**","PO","SP","MLRR","64360MLR Y800 01","","","","COVER ASSY,L TANK","1513","2026/02/11","15","64360MLRY80" +"K*SP**","PO","SP","MJP","64361MJP G501AB01","","SOZAI","0","COWL,L MIDDLE(SANDING)","1513","2026/02/02","20","64361MJPG50AB" +"K*SP**","PO","SP","MKV","64361MKV D000AB","","SOZAI","0","COWL,L FRONT SIDE(SANDING)","1513","2026/02/24","30","64361MKVD00AB" +"K*SP**","PO","SP","MLF","64361MLF E000AB","","SOZAI","","COWL L MIDDLE(SANDING)","1513","2026/02/25","20","64361MLFE00AB" +"K*SP**","PO","SP","MLF","64361MLF E000AB","","SOZAI","","COWL L MIDDLE(SANDING)","1513","2026/02/26","20","64361MLFE00AB" +"K*SP**","PO","SP","MKH","64370MKH D000AB","","SOZAI","0","COWL,L SIDE(SANDING)","1513","2026/02/17","10","64370MKHD00AB" +"K*SP**","PO","SP","MKF","64406MKF D400AB","","SOZAI","0","COWL,R UNDER(SANDING)","1513","2026/02/04","5","64406MKFD40AB" +"K*SP**","PO","SP","MFJ","64410MFJ A400AB","","SOZAI","MFJH新型","COWL,R UNDER(SANDING)","1513","2026/02/04","10","64410MFJA40AB" +"K*SP**","PO","SP","MGP","64410MGP D000AB","","SOZAI","0","COWL R UNDER(SANDING)","1513","2026/02/17","5","64410MGPD00AB" +"K*SP**","PO","SP","MJC","64410MJC A000AB","","SOZAI","0","COWL,R UNDER(SANDING)","1513","2026/02/03","15","64410MJCA00AB" +"K*SP**","PO","SP","MJC","64410MJC A000AB","","SOZAI","0","COWL,R UNDER(SANDING)","1513","2026/02/04","20","64410MJCA00AB" +"K*SP**","PO","SP","MJC","64410MJC A000AB","","SOZAI","0","COWL,R UNDER(SANDING)","1513","2026/02/05","20","64410MJCA00AB" +"K*SP**","PO","SP","MJC","64410MJC A000AB","","SOZAI","0","COWL,R UNDER(SANDING)","1513","2026/02/06","20","64410MJCA00AB" +"K*SP**","PO","SP","MKA2","64410MJL D700AB","","SOZAI","MKA","SKIRT R FRONT FLOOR(SANDING)","1513","2026/02/09","5","64410MJLD70AB" +"K*SP**","PO","SP","MGH","64460MGH 6400AB","","SOZAI","0","COWL L UNDER(SANDING)","1513","2026/02/19","5","64460MGH640AB" +"K*SP**","PO","SP","MGP","64460MGP D000AB","","SOZAI","0","COWL,L UNDER(SANDING)","1513","2026/02/18","5","64460MGPD00AB" +"K*SP**","PO","SP","MJC","64460MJC A000AB","","SOZAI","","COWL,L UNDER(SANDING)","1513","2026/02/02","5","64460MJCA00AB" +"K*SP**","PO","SP","MKH","64460MKH D000AA","","SOZAI","0","COVER,L SKIRT(SOZAI)","1513","2026/02/17","10","64460MKHD00AA" +"K*SP**","PO","SP","MGE","64471MGE 0000AB","","SOZAI","0","COVER R FUEL TANK(SANDING)","1513","2026/02/11","5","64471MGE000AB" +"K*SP**","PO","SP","MKT","64471MKT D000AA","","SOZAI","D000AA","COVER,L SKIRT(SOZAI)","1513","2026/02/20","25","64471MKTD00AA" +"K*SP**","PO","SP","MCA","64501MCA A601","","","0","COWL,CTR INNER","1513","2026/02/06","15","64501MCAA60" +"K*SP**","PO","SP","MCA","64503MCA A601","","","0","COWL,L INNER","1513","2026/02/06","5","64503MCAA60" +"K*SP**","PO","SP","MCA","64503MCA S400","","","0","COWL,L INNER","1513","2026/02/20","5","64503MCAS40" +"K*SP**","PO","SP","V17","65141V17 0001","G193R","G193R","0","FENDER,R FRONT","1513","2026/02/09","10","65141V17000ZA" +"K*SP**","PO","SP","MFP","77210MFP N901XB","","SOZAI","0","COWL COMP,REAR","1513","2026/02/05","15","77210MFPN90XB" +"K*SP**","PO","SP","MGP","77211MGP D000AB","","SOZAI","0","SEAT COWL(SANDIG)","1513","2026/02/18","5","77211MGPD00AB" +"K*SP**","PO","SP","MKV","77221MKV D000AA","","SOZAI","","COWL,R REAR(SOZAI)","1513","2026/02/05","15","77221MKVD00AA" +"K*SP**","PO","SP","MKA2","77230MKA D700AA","","SOZAI","","COWL,L REAR(SOZAI)","1513","2026/02/09","5","77230MKAD70AA" +"K*SP**","PO","SP","MFM","77231MFM C000AB","","SOZAI","MFM新型","COWL RR CENTER(SANDING)","1513","2026/02/13","5","77231MFMC00AB" +"K*SP**","PO","SP","MKF","77231MKF D400AA","","SOZAI","0","COWL,REAR UNDER(SOZAI)","1513","2026/02/23","5","77231MKFD40AA" +"K*SP**","PO","SP","MFM","77241MFM C000AB","","SOZAI","MFM新型","COWL R RR(SANDING)","1513","2026/02/09","10","77241MFMC00AB" +"K*SP**","PO","SP","MKR","77241MKR D100AA","","SOZAI","","COWL,L REAR SIDE(SOZAI)","1513","2026/02/10","10","77241MKRD10AA" +"K*SP**","PO","SP","MFM","77251MFM C000AB","","SOZAI","MFM新型","COWL L RR(SANDING)","1513","2026/02/06","20","77251MFMC00AB" +"K*SP**","PO","SP","MKT","77261MKT D000AA","","SOZAI","D000AA","COWL,L REAR(SOZAI)","1513","2026/02/20","5","77261MKTD00AA" +"K*SP**","PO","SP","MKV","77271MKV D000AA","","SOZAI","","COWL,L REAR(SOZAI)","1513","2026/02/23","5","77271MKVD00AA" +"K*SP**","PO","SP","K88","80100K88 L201","PB186","PB186","0","FENDER,REAR","1513","2026/02/23","5","80100K88L20ZC" +"K*SP**","PO","SP","K88","80100K88 L201","R110","R110","0","FENDER,REAR","1513","2026/02/10","5","80100K88L20ZB" +"K*SP**","PO","SP","K88","80100K88 L201","T23","T23","0","FENDER,REAR","1513","2026/02/11","10","80100K88L20ZA" +"K*SP**","PO","SP","MJR","80100MJR 6700AB","","SOZAI","0","FENDER B RR(SANDING)","1513","2026/02/10","5","80100MJR670AB" +"K*SP**","PO","SP","MKE","80101K95 AJ00","R292R","R292R","0","SET ILLUS,RR FENDER","1513","2026/02/19","5","80101K95AJ0ZA" +"K*SP**","PO","SP","MCA","80107MCA S400AB","","SOZAI","0","COVER R SADDLEBAG REAR(SANDING)","1513","2026/02/26","5","80107MCAS40AB" +"K*SP**","PO","SP","HP1","80110HP1 60002001","NH196","NH196","0","REAR FENDER","1513","2026/02/23","10","80110HP1600ZD" +"K*SP**","PO","SP","HP1","80110HP1 60002001","NHA79MR","NHA79MR","0","REAR FENDER","1513","2026/02/19","10","80110HP1600ZA" +"K*SP**","PO","SP","HP1","80110HP1 60002001","NHA79MR","NHA79MR","0","REAR FENDER","1513","2026/02/20","5","80110HP1600ZA" +"K*SP**","PO","SP","MKC","80131MKC A000AB","","SOZAI","","COVERA,LSADDLEBAGRR(SANDING)","1513","2026/02/17","10","80131MKCA00AB" +"K*SP**","PO","SP","K88","80151K88 L201","T23","T23","スタンダード・ビジネス","COVER,CENTER","1513","2026/02/12","5","80151K88L20ZA" +"K*SP**","PO","SP","GJH","81100GJH J000","TYPE1","","0","SET ILLUS,RR DECK COVER","1513","2026/02/13","2","81100GJHJ00ZA" +"K*SP**","PO","SP","MKC","81112MKC A000AB","","SOZAI","","COVER R,TRUNK SIDE(SANDING)","1513","2026/02/20","5","81112MKCA00AB" +"K*SP**","PO","SP","MKC","81112MKC L000AB","","SOZAI","","COVER,R TRUNK SIDE(SANDING)","1513","2026/02/02","20","81112MKCL00AB" +"K*SP**","PO","SP","MKC","81114MKC A001","","","旧型","BOX ASSY,TRUNK INNER","1513","2026/02/17","15","81114MKCA00" +"K*SP**","PO","SP","MKC","81116MKC A000AB","","SOZAI","","COVER CENTER,TRUNKLWR(SANDING)","1513","2026/02/06","10","81116MKCA00AB" +"K*SP**","PO","SP","MKC","81116MKC L000AB","","SOZAI","","COVER CENTER,TRUNKLWR(SANDING)","1513","2026/02/02","5","81116MKCL00AB" +"K*SP**","PO","SP","MKC","81121MKC A000AB","","SOZAI","TL_OLD","LID,TRUNK(SANDING)","1513","2026/02/13","5","81121MKCA00AB" +"K*SP**","PO","SP","K88","81131K88 L210","NH388R","NH388R","スタンダード・ビジネス","SHIELD,LEG(NEW)","1513","2026/02/18","50","81131K88L21ZA" +"K*SP**","PO","SP","K88","81135K88 Y100","YR176","YR176","ビジネス","COVER,COMB AND LOCK","1513","2026/02/12","10","81135K88Y10ZB" +"K*SP**","PO","SP","MCA","81143MCA S400AB","","SOZAI","0","COVER R LWR TRUNK(SANDING)","1513","2026/02/26","10","81143MCAS40AB" +"K*SP**","PO","SP","MCA","81148MCA S400AB","","SOZAI","0","COVER L LWR TRUNK(SANDING)","1513","2026/02/25","25","81148MCAS40AB" +"K*SP**","PO","SP","MKC","81212MKC A000AB","","SOZAI","","COVER,L TRUNK SIDE(SANDING)","1513","2026/02/13","5","81212MKCA00AB" +"K*SP**","PO","SP","MKC","81212MKC L000AB","","SOZAI","","COVER,L TRUNK SIDE(SANDING)","1513","2026/02/03","20","81212MKCL00AB" +"K*SP**","PO","SP","MCA","81221MCA S400AB","","SOZAI","0","LID,R SADDLEBAG(SANDING)","1513","2026/02/25","10","81221MCAS40AB" +"K*SP**","PO","SP","MCA","81231MCA S400","","","0","PANEL,R SADDLEBAG","1513","2026/02/25","5","81231MCAS40" +"K*SP**","PO","SP","MCA","81241MCA S400","","","0","INNER LID,R SADDLEBAG","1513","2026/02/26","5","81241MCAS40" +"K*SP**","PO","SP","MKC","81311MKC A001","","","0","BODY,R SADDLEBAG","1513","2026/02/02","15","81311MKCA00" +"K*SP**","PO","SP","MKC","81311MKC A101","","","AUDIO","BODY,R SADDLEBAG","1513","2026/02/06","5","81311MKCA10" +"K*SP**","PO","SP","MKC","81321MKC A000AB","","SOZAI","","LID,R SADDLEBAG(SANDING)","1513","2026/02/06","20","81321MKCA00AB" +"K*SP**","PO","SP","MKC","81331MKC A000","","","0","PANEL,R SADDLEBAG","1513","2026/02/09","15","81331MKCA00" +"K*SP**","PO","SP","MKC","81331MKC A000","","","0","PANEL,R SADDLEBAG","1513","2026/02/10","5","81331MKCA00" +"K*SP**","PO","SP","MKC","81341MKC A001","","","0","INNER LID,R SADDLEBAG","1513","2026/02/12","10","81341MKCA00" +"K*SP**","PO","SP","MJN","81360MJN A002","","NH1","0","LID,L SADDLEBAG","1513","2026/02/11","10","81360MJNA00" +"K*SP**","PO","SP","MKC","81411MKC A001","","","0","BODY,L SADDLEBAG","1513","2026/02/04","15","81411MKCA00" +"K*SP**","PO","SP","MKC","81411MKC A001","","","0","BODY,L SADDLEBAG","1513","2026/02/05","15","81411MKCA00" +"K*SP**","PO","SP","MKC","81411MKC A101","","","0","BODY,L SADDLEBAG","1513","2026/02/09","10","81411MKCA10" +"K*SP**","PO","SP","MCA","81421MCA S400AB","","SOZAI","0","LID,L SADDLEBAG(SANDING)","1513","2026/02/26","10","81421MCAS40AB" +"K*SP**","PO","SP","MKC","81421MKC A000AB","","SOZAI","0","LID,L SADDLEBAG(SANDING)","1513","2026/02/05","15","81421MKCA00AB" +"K*SP**","PO","SP","MKC","81431MKC A001","","","0","PANEL,L SADDLEBAG","1513","2026/02/11","15","81431MKCA00" +"K*SP**","PO","SP","MKC","81431MKC A001","","","0","PANEL,L SADDLEBAG","1513","2026/02/12","10","81431MKCA00" +"K*SP**","PO","SP","MKC","81441MKC A001","","","0","INNER LID,L SADDLEBAG","1513","2026/02/10","15","81441MKCA00" +"K*SP**","PO","SP","MCA","81501MCA S400AB","","SOZAI","0","COWL CTR RR SADDLEBAG(SANDING)","1513","2026/02/26","5","81501MCAS40AB" +"K*SP**","PO","SP","MKC","81550MKC A100AB","","SOZAI","","COVER,CTR RR TOP(SANDING)","1513","2026/02/13","5","81550MKCA10AB" +"K*SP**","PO","SP","MKC","81551MKC A100AA","","SOZAI","","LID R,RR TOP(SOZAI)","1513","2026/02/12","10","81551MKCA10AA" +"K*SP**","PO","SP","MKC","81556MKC A100AA","","SOZAI","","LID L,RR TOP(SOZAI)","1513","2026/02/16","5","81556MKCA10AA" +"K*SP**","PO","SP","MCA","82513MCA S400","","NH1","0","COVER,L SADDLEBAG LID","1513","2026/02/20","5","82513MCAS40" +"K*SP**","PO","SP","MKR","83152MKR D100AB","","SOZAI","","SHELTER,FR(SANDING)","1513","2026/02/10","5","83152MKRD10AB" +"K*SP**","PO","SP","MKR","83162MKR D100AA","","SOZAI","","COVER,R SIDE(SOZAI)","1513","2026/02/10","5","83162MKRD10AA" +"K*SP**","PO","SP","MKR","83172MKR D100AA","","SOZAI","","COVER,L SIDE(SOZAI)","1513","2026/02/11","5","83172MKRD10AA" +"K*SP**","PO","SP","K88","83404K88 L001","NH388R","NH388R","0","LID,R BODY COVER","1513","2026/02/18","5","83404K88L00ZA" +"K*SP**","PO","SP","K88","83404K88 L201","NH1","NH1","0","LID,R BODY COVER","1513","2026/02/19","10","83404K88L20ZD" +"K*SP**","PO","SP","K88","83410K88 B000","TYPE2","NH1","0","SET ILLUS,R BODY COVER LID","1513","2026/02/04","5","83410K88B00ZB" +"K*SP**","PO","SP","K88","83410K88 B000","TYPE3","NH1","0","SET ILLUS,R BODY COVER LID","1513","2026/02/09","10","83410K88B00ZA" +"K*SP**","PO","SP","K88","83504K88 L001","NH388R","NH388R","0","LID,L BODY COVER","1513","2026/02/12","25","83504K88L00ZA" +"K*SP**","PO","SP","K88","83504K88 L201","NH1","NH1","0","LID,L BODY COVER","1513","2026/02/02","15","83504K88L20ZD" +"K*SP**","PO","SP","K88","83504K88 L201","R110","R110","0","LID,L BODY COVER","1513","2026/02/16","20","83504K88L20ZB" +"K*SP**","PO","SP","K88","83504K88 L201","R110","R110","0","LID,L BODY COVER","1513","2026/02/17","20","83504K88L20ZB" +"K*SP**","PO","SP","K88","83510GGN B000 01","TYPE1","NH1","0","SET ILLUS,L BODY COVER LID","1513","2026/02/05","5","83510GGNB00ZA" +"K*SP**","PO","SP","GGZ","83510GGZ J000AA","","SOZAI","0","COVER,R BODY(SOZAI)","1513","2026/02/11","5","83510GGZJ00AA" +"K*SP**","PO","SP","GJA","83510GJA J000AA","","SOZAI","0","COVER,R BODY(SOZAI)","1513","2026/02/11","50","83510GJAJ00AA" +"K*SP**","PO","SP","GJA","83510GJA J000AA","","SOZAI","0","COVER,R BODY(SOZAI)","1513","2026/02/12","15","83510GJAJ00AA" +"K*SP**","PO","SP","GJB","83510GJB J000AA","","SOZAI","0","COVER,R BODY(SOZAI)","1513","2026/02/19","5","83510GJBJ00AA" +"K*SP**","PO","SP","GJB","83510GJB J000AA","","SOZAI","0","COVER,R BODY(SOZAI)","1513","2026/02/20","50","83510GJBJ00AA" +"K*SP**","PO","SP","GJB","83510GJB J000AA","","SOZAI","0","COVER,R BODY(SOZAI)","1513","2026/02/23","50","83510GJBJ00AA" +"K*SP**","PO","SP","K88","83510K88 B000","TYPE3","NH1","0","SET ILLUS,L BODY COVER LID","1513","2026/02/10","5","83510K88B00ZA" +"K*SP**","PO","SP","MLC","83510MLC D000AB","","SOZAI","","COVER,A R SIDE(SANDING)","1513","2026/02/06","5","83510MLCD00AB" +"K*SP**","PO","SP","GJB","83520GJB J000AA","","SOZAI","0","COVER,R SIDE(SOZAI)","1513","2026/02/10","50","83520GJBJ00AA" +"K*SP**","PO","SP","GJB","83520GJB J000AA","","SOZAI","0","COVER,R SIDE(SOZAI)","1513","2026/02/11","50","83520GJBJ00AA" +"K*SP**","PO","SP","GJB","83520GJB J000AA","","SOZAI","0","COVER,R SIDE(SOZAI)","1513","2026/02/12","50","83520GJBJ00AA" +"K*SP**","PO","SP","GJB","83520GJB J000AA","","SOZAI","0","COVER,R SIDE(SOZAI)","1513","2026/02/13","50","83520GJBJ00AA" +"K*SP**","PO","SP","GJB","83520GJB J000AA","","SOZAI","0","COVER,R SIDE(SOZAI)","1513","2026/02/16","50","83520GJBJ00AA" +"K*SP**","PO","SP","GJB","83520GJB J000AA","","SOZAI","0","COVER,R SIDE(SOZAI)","1513","2026/02/17","50","83520GJBJ00AA" +"K*SP**","PO","SP","GJB","83520GJB J000AA","","SOZAI","0","COVER,R SIDE(SOZAI)","1513","2026/02/18","40","83520GJBJ00AA" +"K*SP**","PO","SP","GGZ","83521GGZ J001AA","","SOZAI","0","COVER,R SIDE(SOZAI)","1513","2026/02/11","5","83521GGZJ00AA" +"K*SP**","PO","SP","MKW","83521MKW D000AB","","SOZAI","","SHELTER,R SIDE(SANDING)","1513","2026/02/04","5","83521MKWD00AB" +"K*SP**","PO","SP","MFM","83600MFM C000AB","","SOZAI","0","COVER R SIDE(SANDING)","1513","2026/02/13","5","83600MFMC00AB" +"K*SP**","PO","SP","K88","83601K88 L210","T23","T23","0","COVER,R BODY","1513","2026/02/16","10","83601K88L21ZA" +"K*SP**","PO","SP","GJA","83610GJA J000AA","","SOZAI","0","COVER L BODY(SOZAI)","1513","2026/02/13","50","83610GJAJ00AA" +"K*SP**","PO","SP","GJA","83610GJA J000AA","","SOZAI","0","COVER L BODY(SOZAI)","1513","2026/02/16","10","83610GJAJ00AA" +"K*SP**","PO","SP","GJB","83610GJB J000AA","","SOZAI","0","COVER L BODY(SOZAI)","1513","2026/02/24","10","83610GJBJ00AA" +"K*SP**","PO","SP","GJB","83610GJB J000AA","","SOZAI","0","COVER L BODY(SOZAI)","1513","2026/02/25","50","83610GJBJ00AA" +"K*SP**","PO","SP","GJB","83610GJB J000AA","","SOZAI","0","COVER L BODY(SOZAI)","1513","2026/02/26","50","83610GJBJ00AA" +"K*SP**","PO","SP","MJP","83611MJP G501AA","","SOZAI","0","COVER,R SIDE(SOZAI)","1513","2026/02/03","15","83611MJPG50AA" +"K*SP**","PO","SP","MKC","83611MKC A000AB","","SOZAI","","COVER A,R SIDE(SANDING)","1513","2026/02/03","5","83611MKCA00AB" +"K*SP**","PO","SP","GJB","83620GJB J000AA","","SOZAI","0","COVER,L SIDE(SOZAI)","1513","2026/02/18","19","83620GJBJ00AA" +"K*SP**","PO","SP","GJB","83620GJB J000AA","","SOZAI","0","COVER,L SIDE(SOZAI)","1513","2026/02/19","50","83620GJBJ00AA" +"K*SP**","PO","SP","GJB","83620GJB J000AA","","SOZAI","0","COVER,L SIDE(SOZAI)","1513","2026/02/20","50","83620GJBJ00AA" +"K*SP**","PO","SP","GJB","83620GJB J000AA","","SOZAI","0","COVER,L SIDE(SOZAI)","1513","2026/02/23","50","83620GJBJ00AA" +"K*SP**","PO","SP","GJB","83620GJB J000AA","","SOZAI","0","COVER,L SIDE(SOZAI)","1513","2026/02/24","50","83620GJBJ00AA" +"K*SP**","PO","SP","GJB","83620GJB J000AA","","SOZAI","0","COVER,L SIDE(SOZAI)","1513","2026/02/25","50","83620GJBJ00AA" +"K*SP**","PO","SP","GJB","83620GJB J000AA","","SOZAI","0","COVER,L SIDE(SOZAI)","1513","2026/02/26","50","83620GJBJ00AA" +"K*SP**","PO","SP","GGZ","83621GGZ J001AA","","SOZAI","0","COVER,L SIDE(SOZAI)","1513","2026/02/11","5","83621GGZJ00AA" +"K*SP**","PO","SP","MFT","83661MFT 6400AA","","SOZAI","0","COVER L RR BODY LOWER(SOZAI)","1513","2026/02/23","5","83661MFT640AA" +"K*SP**","PO","SP","MJP","83711MJP G501AA","","SOZAI","0","COVER,L SIDE(SOZAI)","1513","2026/02/04","10","83711MJPG50AA" +"K*SP**","PO","SP","MKC","83711MKC A000AB","","SOZAI","","COVER A,L SIDE(SANDING)","1513","2026/02/05","5","83711MKCA00AB" +"K*SP**","PO","SP","MKS2","83711MKS E201AA","","SOZAI","","COWL L,RR SIDE(SOZAI)","1513","2026/02/18","5","83711MKSE20AA" +"K*SP**","PO","SP","MLF","83711MLF E000AB","","SOZAI","","COWL A,L RR SIDE(SANDING)","1513","2026/02/24","5","83711MLFE00AB" +"K*SP**","PO","SP","GJB","83712GJB J000AA","","SOZAI","0","COVER,RR CENTER(SOZAI)","1513","2026/02/24","10","83712GJBJ00AA" +"K*SP**","PO","SP","MKN","17570MKY D600 03","NHA86M","NHA86M","0","COVER ASSY,FUEL TANK FR","1513","2026/02/03","5","17570MKYD60ZG" +"K*SP**","PO","SP","K88","53206K88 J001","NH388","NH388","スタンダード","COVER,HANDLE LOW","1513","2026/02/20","5","53206K88J00ZD" +"K*SP**","PO","SP","K88","53206K88 J001","PB394M","PB394M","スタンダード","COVER,HANDLE LOW","1513","2026/02/06","5","53206K88J00ZC" +"K*SP**","PO","SP","K88","53206K88 J001","YR176","YR176","スタンダード","COVER,HANDLE LOW","1513","2026/02/25","5","53206K88J00ZH" +"K*SP**","PO","SP","K64","61000K64 JH00 03","TYPE3","R380","23YM","SET ILLUS,FR FENDER","1513","2026/02/25","5","61000K64JH0ZA" +"K*SP**","PO","SP","K88","61100K88 J001","B197M","B197M","スタンダード","FENDER,FRONT","1513","2026/02/03","15","61100K88J00ZG" +"K*SP**","PO","SP","K88","61100K88 J001","G142M","G142M","スタンダード","FENDER,FRONT","1513","2026/02/02","15","61100K88J00ZF" +"K*SP**","PO","SP","K88","61100K88 J001","NH388","NH388","スタンダード","FENDER,FRONT","1513","2026/02/20","10","61100K88J00ZD" +"K*SP**","PO","SP","K88","61100K88 J001","PB394M","PB394M","スタンダード","FENDER,FRONT","1513","2026/02/06","15","61100K88J00ZC" +"K*SP**","PO","SP","K88","61100K88 J001","R201","R201","スタンダード","FENDER,FRONT","1513","2026/02/13","5","61100K88J00ZJ" +"K*SP**","PO","SP","K88","61100K88 J001","YR211","YR211","スタンダード","FENDER,FRONT","1513","2026/02/18","5","61100K88J00ZB" +"K*SP**","PO","SP","MFJ","61100MFJ D001 06","NHA86M","NHA86M","0","FENDER,FR COMP","1513","2026/02/02","10","61100MFJD00ZV" +"K*SP**","PO","SP","MKN","61101MKN D500 06","NHD19M","NHD19M","0","FENDER,COMP FRONT","1513","2026/02/13","20","61101MKND50ZW" +"K*SP**","PO","SP","MKN","61110MKY J500 03","TYPE1","R381C","0","SET ILLUS,FR FENDER","1513","2026/02/25","5","61110MKYJ50ZC" +"K*SP**","PO","SP","MLRX","61110MLR J800 03","TYPE1","NHA86M","DQ00AA","FENDER,COMP FRONT","1513","2026/02/25","10","61110MLRJ80ZA" +"K*SP**","PO","SP","MJC","64100MJC LS00","NHC47P","NHC47P","0","SET ILLUS,UPPER COWL","1513","2026/02/05","5","64100MJCLS0ZA" +"K*SP**","PO","SP","MKZ","64100MKZ J300","TYPE1","R380","0","SET ILLUST,UPPER COWL","1513","2026/02/10","15","64100MKZJ30ZA" +"K*SP**","PO","SP","MKZ","64100MKZ J300","TYPE1","R380","0","SET ILLUST,UPPER COWL","1513","2026/02/11","15","64100MKZJ30ZA" +"K*SP**","PO","SP","MKZ","64100MKZ J400","TYPE1","NHA86M","0","SET ILLUST,UPPER COWL","1513","2026/02/19","20","64100MKZJ40ZA" +"K*SP**","PO","SP","MKC","64100MLJ M200","TYPE1","R337M","8A+7B","SET ILLUS,GARNISH SCREEN A","1513","2026/02/17","5","64100MLJM20ZA" +"K*SP**","PO","SP","MKC","64100MLJ M700","TYPE1","YR387M/NHC07M","8A+7A+7B","SET ILLUS,GARNISH SCREEN A","1513","2026/02/25","5","64100MLJM70ZA" +"K*SP**","PO","SP","MKC","64105MKC A000 02","TYPE1","NHB73M","8A","GARNISH B ASSY,SCREEN","1513","2026/02/02","15","64105MKCA00ZB" +"K*SP**","PO","SP","MKC","64105MKC A100 02","TYPE1","NHB01","7B+8A","GARNISH B ASSY,SCREEN","1513","2026/02/05","10","64105MKCA10ZA" +"K*SP**","PO","SP","MKC","64110MKC A000","NHA86M","NHA86M","OCなし","GARNISH A,SCREEN","1513","2026/02/02","5","64110MKCA00ZH" +"K*SP**","PO","SP","MKV","64111MKV D500 01","YR386M","YR386M","D500AA","COWL,FRONT","1513","2026/02/18","10","64111MKVD50ZA" +"K*SP**","PO","SP","MKT","64140MKT D000 03","NHA86M","NHA86M","D000AA","COVER ASSY,INNER","1513","2026/02/09","5","64140MKTD00ZG" +"K*SP**","PO","SP","MKT","64140MKT D000 03","NHB01","NHB01","D000AA","COVER ASSY,INNER","1513","2026/02/09","35","64140MKTD00ZD" +"K*SP**","PO","SP","MKT","64140MKT D000 03","R380","R380","D000AA","COVER ASSY,INNER","1513","2026/02/23","10","64140MKTD00ZA" +"K*SP**","PO","SP","MKW","64151MKW D000","NHC08M","NHC08M","0","PANEL,R AIR","1513","2026/02/24","25","64151MKWD00ZA" +"K*SP**","PO","SP","MKW","64151MKW D700","NHB01","NHB01","D700AA","PANEL,R AIR","1513","2026/02/13","10","64151MKWD70ZB" +"K*SP**","PO","SP","MKW","64161MKW D000","NHC08M","NHC08M","0","PANEL,L AIR","1513","2026/02/25","10","64161MKWD00ZA" +"K*SP**","PO","SP","MKW","64161MKW D700","NHB01","NHB01","D700AA","PANEL,L AIR","1513","2026/02/12","10","64161MKWD70ZB" +"K*SP**","PO","SP","MKW","64161MKW D700","NHC08M","NHC08M","D700AA","PANEL,L AIR","1513","2026/02/23","15","64161MKWD70ZA" +"K*SP**","PO","SP","MKYJ","64210MKY JF00","R380","R380","MKY E000AA","SET ILLUS,R MID COWL A","1513","2026/02/23","1","64210MKYJF0ZA" +"K*SP**","PO","SP","MLN1","64210MLN E000","NHA86M","NHA86M","1型","COWL,FR CENTER","1513","2026/02/23","20","64210MLNE00ZC" +"K*SP**","PO","SP","MLT","64211MLT D000","NHB01","NHB01","","COWL,FR UPPER","1513","2026/02/18","5","64211MLTD00ZC" +"K*SP**","PO","SP","MLT","64211MLT D000","R380","R380","","COWL,FR UPPER","1513","2026/02/17","5","64211MLTD00ZA" +"K*SP**","PO","SP","MLL","64212MLL D001","NHA86M","NHA86M","","COWL,R UPPER H/L","1513","2026/02/02","10","64212MLLD00ZE" +"K*SP**","PO","SP","MLL","64212MLL D001","R380","R380","","COWL,R UPPER H/L","1513","2026/02/16","10","64212MLLD00ZA" +"K*SP**","PO","SP","MFP","64220MFP JV00 01","TYPE1 1","NHA66P/R381C","8A+7A+8B+7B","SET ILLUS,R SIDE COWL","1513","2026/02/03","5","64220MFPJV0ZB" +"K*SP**","PO","SP","MFP","64220MFP SB00 01","TYPE1 1","PB409P/NHB53P","ミラー2TN035 8A+7A+7B","SET ILLUS,R SIDE COWL","1513","2026/02/10","5","64220MFPSB0ZB" +"K*SP**","PO","SP","MLRX","64220MLR J900","NHB53P","NHB53P","D800AA","COWL ASSY,R MIDDLE","1513","2026/02/13","4","64220MLRJ90ZA" +"K*SP**","PO","SP","MKT","64222MKT D700","NHD05","NHD05","D700AA","COWL,NOSE","1513","2026/02/25","10","64222MKTD70ZC" +"K*SP**","PO","SP","MKT","64222MKT D700","PB409P","PB409P","D700AA","COWL,NOSE","1513","2026/02/10","5","64222MKTD70ZD" +"K*SP**","PO","SP","MFP","64230MFP SB00 01","TYPE1 1","PB409P/NHB53P","ミラー2TN035 8A+7A+7B","SET ILLUS,L SIDE COWL","1513","2026/02/11","5","64230MFPSB0ZB" +"K*SP**","PO","SP","MLRX","64240MLR J900","NHB53P","NHB53P","D800AA","COWL ASSY,L MIDDLE","1513","2026/02/16","30","64240MLRJ90ZA" +"K*SP**","PO","SP","MLRX","64240MLR Y800","R134","R134","D800AA","COWL ASSY,L MIDDLE","1513","2026/02/23","5","64240MLRY80ZA" +"K*SP**","PO","SP","MLF","64241MLF E800","YR386M","YR386M","一発クリア","COWL,FR CENTER","1513","2026/02/17","5","64241MLFE80ZA" +"K*SP**","PO","SP","MLRR","64251MLR D000","NHA86M","NHA86M","D000AA","COWL,R MIDDLE","1513","2026/02/25","5","64251MLRD00ZC" +"K*SP**","PO","SP","MKS2","64252MKS E200 04","TYPE1","NHA86M","2型 8A","COVER ASSY,FRONT LOWER","1513","2026/02/06","10","64252MKSE20ZB" +"K*SP**","PO","SP","MKS2","64252MKS E200 04","TYPE2","NHB53P","2型 7B+8A","COVER ASSY,FRONT LOWER","1513","2026/02/20","15","64252MKSE20ZA" +"K*SP**","PO","SP","MKS1","64255MKS E000","TYPE1","NHA86M","1型 7B","SET ILLUS,FR CENTER COWL","1513","2026/02/05","10","64255MKSE00ZA" +"K*SP**","PO","SP","MKS2","64255MKS E200 01","TYPE2","B197M","2型 7B","SET ILLUS,FR CENTER COWL","1513","2026/02/03","15","64255MKSE20ZA" +"K*SP**","PO","SP","MKS1","64255MLG E500","TYPE1","B197M","1型 7B","SET ILLUS,FR CENTER COWL","1513","2026/02/04","5","64255MLGE50ZA" +"K*SP**","PO","SP","MLN1","64255MLN E200","TYPE1","NHB01","1型 8A+7B","SET ILLUS,FR CENTER COWL","1513","2026/02/18","15","64255MLNE20ZC" +"K*SP**","PO","SP","MLN4","64255MLN ER00","NHB01","NHB01","MKS2型 8A","SET ILLUS,FR CENTER COWL","1513","2026/02/16","10","64255MLNER0ZA" +"K*SP**","PO","SP","MLN4","64255MLN ES00 01","TYPE1","NHB53P","MKS2型 7B","SET ILLUS,FR CENTER COWL","1513","2026/02/19","10","64255MLNES0ZA" +"K*SP**","PO","SP","MKS1","64260MKS E000 01","TYPE1","NHA86M","1型 7B","SET ILLUS,R FR SIDE COWL","1513","2026/02/05","10","64260MKSE00ZB" +"K*SP**","PO","SP","MKS1","64260MKS E000 01","TYPE2","R380","1型 7B","SET ILLUS,R FR SIDE COWL","1513","2026/02/23","10","64260MKSE00ZA" +"K*SP**","PO","SP","MKS1","64265MKS E000 01","TYPE1","NHA86M","1型 7B","SET ILLUS,L FR SIDE COWL","1513","2026/02/06","5","64265MKSE00ZB" +"K*SP**","PO","SP","MKS1","64265MKS E000 01","TYPE2","R380","1型 7B","SET ILLUS,L FR SIDE COWL","1513","2026/02/24","20","64265MKSE00ZA" +"K*SP**","PO","SP","MKS1","64265MLG E400","NHB53P","NHB53P","1型 8A+7B","SET ILLUS,L FR SIDE COWL","1513","2026/02/16","10","64265MLGE40ZD" +"K*SP**","PO","SP","MLRR","64280MLR J200","R380","R380","D000AA","SET ILLUS,R WINGLET COWL","1513","2026/02/16","5","64280MLRJ20ZA" +"K*SP**","PO","SP","K64","64300K64 JH01","TYPE2","NHB53P","23YM","SET ILLUS,R MIDDLE COWL","1513","2026/02/26","10","64300K64JH0ZA" +"K*SP**","PO","SP","MJC","64300MJC LS00 01","NHC47P","NHC47P","0","SET ILLUS,R MIDDLE COWL","1513","2026/02/05","10","64300MJCLS0ZA" +"K*SP**","PO","SP","MKT","64300MKT D700","NHB53P","NHB53P","D700AA","COWL ASSY,R RR SIDE","1513","2026/02/17","5","64300MKTD70ZA" +"K*SP**","PO","SP","MKT","64300MKT D700","NHD05","NHD05","D700AA","COWL ASSY,R RR SIDE","1513","2026/02/25","5","64300MKTD70ZC" +"K*SP**","PO","SP","MLB","64300MLB D200","TYPE1","NHB54P","0","SET ILLUS,R SHROUD A","1513","2026/02/02","5","64300MLBD20ZD" +"K*SP**","PO","SP","MLB","64300MLB D200","TYPE2","B197M","0","SET ILLUS,R SHROUD A","1513","2026/02/04","5","64300MLBD20ZC" +"K*SP**","PO","SP","MLB","64300MLB D200","TYPE4","NHA86M","0","SET ILLUS,R SHROUD A","1513","2026/02/25","15","64300MLBD20ZA" +"K*SP**","PO","SP","MLB","64300MLB G400","TYPE1","NHB54P","0","SET ILLUS,R SHROUD A","1513","2026/02/04","5","64300MLBG40ZC" +"K*SP**","PO","SP","MKC","64300MLJ M500 01","NHA86M","NHA86M","8A+8B","COWL ASSY,R MIDDLE","1513","2026/02/03","5","64300MLJM50ZA" +"K*SP**","PO","SP","MLRR","64300MLR J200","R380","R380","D000AA","SET ILLUS,R MIDDLE COWL","1513","2026/02/16","5","64300MLRJ20ZA" +"K*SP**","PO","SP","MKC","64305MLJ AY00","TYPE1","NH389M","8A+8B","COWL ASSY,L MIDDLE","1513","2026/02/27","5","64305MLJAY0ZA" +"K*SP**","PO","SP","MKA2","64310MJL D701","NH436M","NH436M","新型","COWL,R FRONT SIDE","1513","2026/02/26","5","64310MJLD70ZF" +"K*SP**","PO","SP","MKT","64310MKT D600","TYPE2","R380","D000AA 旧型","SET ILLUS,R SIDE COWL","1513","2026/02/23","5","64310MKTD60ZA" +"K*SP**","PO","SP","MKT","64310MKT D800","Y242","Y242","D700AA","SET ILLUS,R SIDE COWL","1513","2026/02/06","10","64310MKTD80ZA" +"K*SP**","PO","SP","MLF","64310MLF E800","NHC52MC","NHC52MC","8A E800AA","SET ILLUS,R MIDDLE COWL","1513","2026/02/16","5","64310MLFE80ZC" +"K*SP**","PO","SP","MLF","64310MLF E800","PB409PC","PB409PC","8A E800AA","SET ILLUS,R MIDDLE COWL","1513","2026/02/27","5","64310MLFE80ZB" +"K*SP**","PO","SP","MKS1","64310MLG E500","TYPE1","NHB53P","1型 8A+7B","SET ILLUS,R MIDDLE COWL","1513","2026/02/13","5","64310MLGE50ZA" +"K*SP**","PO","SP","MLL","64310MLL D000","NHB01","NHB01","8A","SET ILLUS,R SHROUD A","1513","2026/02/16","5","64310MLLD00ZA" +"K*SP**","PO","SP","MLL","64310MLL W100","NHB01","NHB01","8A","SET ILLUS,R SHROUD A","1513","2026/02/18","13","64310MLLW10ZA" +"K*SP**","PO","SP","MLN1","64310MLN E100","NHA86M","NHA86M","1型 8A","SET ILLUS,R MIDDLE COWL","1513","2026/02/23","5","64310MLNE10ZA" +"K*SP**","PO","SP","MLN1","64310MLN E200","R380","R380","1型 8A+7B","SET ILLUS,R MIDDLE COWL","1513","2026/02/16","10","64310MLNE20ZA" +"K*SP**","PO","SP","MLN1","64310MLN E500 01","NHB53P","NHB53P","1型 8A+7B","SET ILLUS,R MIDDLE COWL","1513","2026/02/20","15","64310MLNE50ZA" +"K*SP**","PO","SP","MKT","64311MKT D000","NHA86M","NHA86M","D000AA 旧型","COWL,R SIDE","1513","2026/02/09","15","64311MKTD00ZG" +"K*SP**","PO","SP","MKT","64311MKT D000","NHC64M","NHC64M","D000AA 旧型","COWL,R SIDE","1513","2026/02/04","5","64311MKTD00ZF" +"K*SP**","PO","SP","MKT","64311MKT D700","NHB01","NHB01","D700AA","COWL,R SIDE","1513","2026/02/09","20","64311MKTD70ZB" +"K*SP**","PO","SP","MKT","64311MKT D700","NHB53P","NHB53P","D700AA","COWL,R SIDE","1513","2026/02/17","10","64311MKTD70ZA" +"K*SP**","PO","SP","MKV","64311MKV D500 01","NHC65M","NHC65M","D500AA","COWL,R FRONT SIDE A","1513","2026/02/12","5","64311MKVD50ZB" +"K*SP**","PO","SP","MKT","64315MKT D700","NHB53P","NHB53P","D700AA","LID COMP,POCKET","1513","2026/02/18","5","64315MKTD70ZA" +"K*SP**","PO","SP","MKT","64315MKT DB00","NHB54P","NHB54P","D700AA ストライプ有り","LID COMP,POCKET","1513","2026/02/05","10","64315MKTDB0ZA" +"K*SP**","PO","SP","MKZ","64315MKZ J300 02","R380","R380","0","COWL ASSY,R MIDDLE","1513","2026/02/10","15","64315MKZJ30ZA" +"K*SP**","PO","SP","MKZ","64315MKZ J300 02","R380","R380","0","COWL ASSY,R MIDDLE","1513","2026/02/11","10","64315MKZJ30ZA" +"K*SP**","PO","SP","MKZ","64315MKZ J400 02","NHA86M","NHA86M","0","COWL ASSY,R MIDDLE","1513","2026/02/20","15","64315MKZJ40ZA" +"K*SP**","PO","SP","MKZ","64315MKZ J400 02","NHA86M","NHA86M","0","COWL ASSY,R MIDDLE","1513","2026/02/23","15","64315MKZJ40ZA" +"K*SP**","PO","SP","MKZ","64320MKZ J300","PB440M","PB440M","0","SET ILLUS,R WINGLET","1513","2026/02/18","30","64320MKZJ30ZA" +"K*SP**","PO","SP","MKZ","64320MKZ J400","NHA86M","NHA86M","0","SET ILLUS,R WINGLET","1513","2026/02/20","15","64320MKZJ40ZA" +"K*SP**","PO","SP","MKZ","64320MKZ J400","NHA86M","NHA86M","0","SET ILLUS,R WINGLET","1513","2026/02/23","20","64320MKZJ40ZA" +"K*SP**","PO","SP","MLRX","64320MLR Y800","TYPE1","NHA86M","D800AA","SET ILLUS,R FR SIDE COWL","1513","2026/02/25","10","64320MLRY80ZA" +"K*SP**","PO","SP","MLM","64321MLM E000","NH389M","NH389M","0","COVER,R UNDER","1513","2026/02/24","15","64321MLME00ZA" +"K*SP**","PO","SP","MLM","64321MLM E000","NH389M","NH389M","0","COVER,R UNDER","1513","2026/02/25","20","64321MLME00ZA" +"K*SP**","PO","SP","MLM","64321MLM E000","NHD28M","NHD28M","0","COVER,R UNDER","1513","2026/02/02","15","64321MLME00ZB" +"K*SP**","PO","SP","MLM","64321MLM E000","NHD28M","NHD28M","0","COVER,R UNDER","1513","2026/02/03","20","64321MLME00ZB" +"K*SP**","PO","SP","MKW","64330MKW D000","TYPE3","R380","0","SET ILLUS,R MIDDLE COWL A","1513","2026/02/23","10","64330MKWD00ZB" +"K*SP**","PO","SP","MKW","64330MKW D700","TYPE3","NHD05","D700AA","SET ILLUS,R MIDDLE COWL","1513","2026/02/25","5","64330MKWD70ZA" +"K*SP**","PO","SP","MLM","64331MLM E000","NH389M","NH389M","0","COVER,L UNDER","1513","2026/02/26","20","64331MLME00ZA" +"K*SP**","PO","SP","MLM","64331MLM E000","NH389M","NH389M","0","COVER,L UNDER","1513","2026/02/27","20","64331MLME00ZA" +"K*SP**","PO","SP","MLM","64331MLM E000","NHD28M","NHD28M","0","COVER,L UNDER","1513","2026/02/04","20","64331MLME00ZB" +"K*SP**","PO","SP","MLM","64331MLM E000","NHD28M","NHD28M","0","COVER,L UNDER","1513","2026/02/05","20","64331MLME00ZB" +"K*SP**","PO","SP","MLT","64335MLT D000","TYPE2","NHC47P","8A+8B","COVER ASSY,R FUEL TANK","1513","2026/02/09","5","64335MLTD00ZA" +"K*SP**","PO","SP","MLT","64335MLT D100","R380","R380","8A+7B+8B","COVER ASSY,R FUEL TANK","1513","2026/02/16","10","64335MLTD10ZB" +"K*SP**","PO","SP","K64","64340K64 J002","NH436M","NH436M","旧型","COVER,R FRONT SIDE","1513","2026/02/26","10","64340K64J00ZA" +"K*SP**","PO","SP","MKW","64340MKW D000","TYPE1","NHA86M","0","SET ILLUS,L MIDDLE COWL A","1513","2026/02/17","10","64340MKWD00ZD" +"K*SP**","PO","SP","MKW","64340MKW D000","TYPE3","R380","0","SET ILLUS,L MIDDLE COWL A","1513","2026/02/24","10","64340MKWD00ZB" +"K*SP**","PO","SP","MKW","64340MKW D000","TYPE4","B197M","0","SET ILLUS,L MIDDLE COWL A","1513","2026/02/03","10","64340MKWD00ZA" +"K*SP**","PO","SP","MKW","64340MKW D700","TYPE1","R134","D700AA","SET ILLUS,L MIDDLE COWL","1513","2026/02/23","5","64340MKWD70ZC" +"K*SP**","PO","SP","MKW","64340MKW D700","TYPE2","NHB54P","D700AA","SET ILLUS,L MIDDLE COWL","1513","2026/02/03","15","64340MKWD70ZB" +"K*SP**","PO","SP","MLRX","64340MLR Y800","TYPE1","NHA86M","D800AA","SET ILLUS,L FR SIDE COWL","1513","2026/02/26","15","64340MLRY80ZA" +"K*SP**","PO","SP","MJC","64350MJC LS00 01","NHC47P","NHC47P","8A","SET ILLUS,L MIDDLE COWL","1513","2026/02/06","5","64350MJCLS0ZA" +"K*SP**","PO","SP","MKT","64350MKT D700","NHB01","NHB01","D700AA","COWL ASSY,L RR SIDE","1513","2026/02/10","10","64350MKTD70ZB" +"K*SP**","PO","SP","MKT","64350MKT D700","NHB53P","NHB53P","D700AA","COWL ASSY,L RR SIDE","1513","2026/02/18","5","64350MKTD70ZA" +"K*SP**","PO","SP","MKT","64350MKT D700","NHD05","NHD05","D700AA","COWL ASSY,L RR SIDE","1513","2026/02/26","5","64350MKTD70ZC" +"K*SP**","PO","SP","MKW","64351MKW D000","NHB01","NHB01","0","COWL B,R MIDDLE","1513","2026/02/13","5","64351MKWD00ZC" +"K*SP**","PO","SP","MKW","64351MKW D000","NHC08M","NHC08M","0","COWL B,R MIDDLE","1513","2026/02/26","15","64351MKWD00ZA" +"K*SP**","PO","SP","MKT","64360MKT D800","Y242","Y242","D700AA","SET ILLUS,L SIDE COWL","1513","2026/02/09","15","64360MKTD80ZA" +"K*SP**","PO","SP","MLN1","64360MLN E100","NHA86M","NHA86M","1型 8A","SET ILLUS,L MIDDLE COWL","1513","2026/02/24","5","64360MLNE10ZA" +"K*SP**","PO","SP","MKT","64361MKT D000","NHA86M","NHA86M","D000AA 旧型","COWL,L SIDE","1513","2026/02/10","10","64361MKTD00ZG" +"K*SP**","PO","SP","MKT","64361MKT D000","NHB01","NHB01","D000AA 旧型","COWL,L SIDE","1513","2026/02/04","5","64361MKTD00ZD" +"K*SP**","PO","SP","MKT","64361MKT D000","NHC08M","NHC08M","D000AA 旧型","COWL,L SIDE","1513","2026/02/23","10","64361MKTD00ZC" +"K*SP**","PO","SP","MKT","64361MKT D000","NHC47P","NHC47P","D000AA 旧型","COWL,L SIDE","1513","2026/02/06","5","64361MKTD00ZB" +"K*SP**","PO","SP","MKT","64361MKT D000","NHC64M","NHC64M","D000AA 旧型","COWL,L SIDE","1513","2026/02/05","10","64361MKTD00ZF" +"K*SP**","PO","SP","MKT","64361MKT D000","R380","R380","D000AA 旧型","COWL,L SIDE","1513","2026/02/24","5","64361MKTD00ZA" +"K*SP**","PO","SP","MKT","64361MKT D700","NHB01","NHB01","D700AA","COWL,L SIDE","1513","2026/02/10","10","64361MKTD70ZB" +"K*SP**","PO","SP","MKT","64361MKT D700","NHB53P","NHB53P","D700AA","COWL,L SIDE","1513","2026/02/18","5","64361MKTD70ZA" +"K*SP**","PO","SP","MKV","64361MKV D500 01","NHA86M","NHA86M","D500AA","COWL,L FRONT SIDE A","1513","2026/02/18","15","64361MKVD50ZC" +"K*SP**","PO","SP","MKV","64361MKV D500 01","YR386M","YR386M","D500AA","COWL,L FRONT SIDE A","1513","2026/02/18","5","64361MKVD50ZA" +"K*SP**","PO","SP","MKW","64361MKW D000","NHB01","NHB01","0","COWL B,L MIDDLE","1513","2026/02/12","10","64361MKWD00ZC" +"K*SP**","PO","SP","MKW","64361MKW D000","NHC08M","NHC08M","0","COWL B,L MIDDLE","1513","2026/02/27","15","64361MKWD00ZA" +"K*SP**","PO","SP","MKZ","64365MKZ J300 01","R380","R380","0","COWL ASSY,L MIDDLE","1513","2026/02/12","20","64365MKZJ30ZA" +"K*SP**","PO","SP","MKZ","64365MKZ J300 01","R380","R380","0","COWL ASSY,L MIDDLE","1513","2026/02/13","20","64365MKZJ30ZA" +"K*SP**","PO","SP","MKZ","64365MKZ J400 01","NHA86M","NHA86M","0","COWL ASSY,L MIDDLE","1513","2026/02/24","10","64365MKZJ40ZA" +"K*SP**","PO","SP","MKZ","64370MKZ J400","NHA86M","NHA86M","0","SET ILLUS,L WINGLET","1513","2026/02/24","25","64370MKZJ40ZA" +"K*SP**","PO","SP","MKPX","64400MKP KQ00","TYPE2","NHB53P","J800AA","SET ILLUS,L MIDDLE COWL","1513","2026/02/16","5","64400MKPKQ0ZA" +"K*SP**","PO","SP","MKZ","64400MKZ J300","TYPE1","R380","0","SET ILLUS,R UNDER COWL","1513","2026/02/10","15","64400MKZJ30ZA" +"K*SP**","PO","SP","MKZ","64400MKZ J300","TYPE1","R380","0","SET ILLUS,R UNDER COWL","1513","2026/02/11","15","64400MKZJ30ZA" +"K*SP**","PO","SP","MKZ","64400MKZ J300","TYPE2","NHA86M","0","SET ILLUS,R UNDER COWL","1513","2026/02/23","10","64400MKZJ30ZB" +"K*SP**","PO","SP","MLB","64400MLB D200","TYPE1","NHB54P","0","SET ILLUS,L SHROUD A","1513","2026/02/03","15","64400MLBD20ZD" +"K*SP**","PO","SP","MLB","64400MLB D200","TYPE4","NHA86M","0","SET ILLUS,L SHROUD A","1513","2026/02/26","10","64400MLBD20ZA" +"K*SP**","PO","SP","MLB","64400MLB G400","TYPE1","NHB54P","0","SET ILLUS,L SHROUD A","1513","2026/02/05","5","64400MLBG40ZC" +"K*SP**","PO","SP","MLRR","64400MLR J200","R380","R380","D000AA","SET ILLUS,L MIDDLE COWL","1513","2026/02/17","10","64400MLRJ20ZA" +"K*SP**","PO","SP","MLF","64410MLF E800","NHC52MC","NHC52MC","8A E800AA","SET ILLUS,L MIDDLE COWL","1513","2026/02/17","5","64410MLFE80ZC" +"K*SP**","PO","SP","MLF","64410MLF E800","PB409PC","PB409PC","8A E800AA","SET ILLUS,L MIDDLE COWL","1513","2026/02/26","10","64410MLFE80ZB" +"K*SP**","PO","SP","MLF","64410MLF E800","YR386M","YR386M","8A E800AA","SET ILLUS,L MIDDLE COWL","1513","2026/02/18","10","64410MLFE80ZA" +"K*SP**","PO","SP","MLL","64410MLL D000","NHB01","NHB01","8A","SET ILLUS,L SHROUD A","1513","2026/02/17","15","64410MLLD00ZA" +"K*SP**","PO","SP","MKV","64411MKV D000","NHA86M","NHA86M","0","SKIRT,R FLOOR","1513","2026/02/11","15","64411MKVD00ZE" +"K*SP**","PO","SP","MKV","64411MKV D000","NHA86M","NHA86M","0","SKIRT,R FLOOR","1513","2026/02/12","15","64411MKVD00ZE" +"K*SP**","PO","SP","MKV","64411MKV D000","NHA86M","NHA86M","0","SKIRT,R FLOOR","1513","2026/02/13","10","64411MKVD00ZE" +"K*SP**","PO","SP","MKV","64411MKV D000","NHC08M","NHC08M","0","SKIRT,R FLOOR","1513","2026/02/20","20","64411MKVD00ZC" +"K*SP**","PO","SP","MKV","64411MKV D000","PB417M","PB417M","0","SKIRT,R FLOOR","1513","2026/02/26","20","64411MKVD00ZB" +"K*SP**","PO","SP","MKV","64411MKV D000","R381C","R381C","0","SKIRT,R FLOOR","1513","2026/02/25","5","64411MKVD00ZA" +"K*SP**","PO","SP","MKR","64420MKR DH00 01","TYPE2","R380","8A+7B+8B","COWL ASSY,R UNDER","1513","2026/02/25","5","64420MKRDH0ZA" +"K*SP**","PO","SP","MKT","64421MKT D000","NHC08M","NHC08M","D000AA 旧型","COVER,R SKIRT","1513","2026/02/20","5","64421MKTD00ZA" +"K*SP**","PO","SP","MLT","64435MLT D100 01","R380","R380","8A+7B+8B","COVER ASSY,L FUEL TANK","1513","2026/02/17","10","64435MLTD10ZB" +"K*SP**","PO","SP","K64","64440K64 J002","NH436M","NH436M","旧型","COVER,L FRONT SIDE","1513","2026/02/27","10","64440K64J00ZA" +"K*SP**","PO","SP","K64","64440K64 J002","R380","R380","旧型","COVER,L FRONT SIDE","1513","2026/02/26","10","64440K64J00ZB" +"K*SP**","PO","SP","MKPX","64440MKP KQ00","NHB01","NHB01","J800AA","SET ILLUS,L SIDE COWL A","1513","2026/02/27","10","64440MKPKQ0ZA" +"K*SP**","PO","SP","MJC","64450MJC LS00 01","NHC47P","NHC47P","8A","COWL COMP,L UNDER","1513","2026/02/06","5","64450MJCLS0ZA" +"K*SP**","PO","SP","MKV","64461MKV D000","NHA86M","NHA86M","0","SKIRT,L FLOOR","1513","2026/02/16","15","64461MKVD00ZE" +"K*SP**","PO","SP","MKV","64461MKV D000","NHA86M","NHA86M","0","SKIRT,L FLOOR","1513","2026/02/17","15","64461MKVD00ZE" +"K*SP**","PO","SP","MKV","64461MKV D000","NHA86M","NHA86M","0","SKIRT,L FLOOR","1513","2026/02/18","10","64461MKVD00ZE" +"K*SP**","PO","SP","MKV","64461MKV D000","NHB01","NHB01","0","SKIRT,L FLOOR","1513","2026/02/11","10","64461MKVD00ZD" +"K*SP**","PO","SP","MKV","64461MKV D000","NHB01","NHB01","0","SKIRT,L FLOOR","1513","2026/02/12","10","64461MKVD00ZD" +"K*SP**","PO","SP","MKV","64461MKV D000","NHC08M","NHC08M","0","SKIRT,L FLOOR","1513","2026/02/23","5","64461MKVD00ZC" +"K*SP**","PO","SP","MKV","64461MKV D000","PB417M","PB417M","0","SKIRT,L FLOOR","1513","2026/02/27","5","64461MKVD00ZB" +"K*SP**","PO","SP","MKT","64471MKT D000","NHC64M","NHC64M","D000AA 旧型","COVER,L SKIRT","1513","2026/02/03","5","64471MKTD00ZC" +"K*SP**","PO","SP","K64","64600K64 JK01","TYPE1","素材","86838K64 JK00 T-1黒マット","SET ILLUS,L MID INNER COWL","1513","2026/02/27","5","64600K64JK0ZA" +"K*SP**","PO","SP","MKV","64600MKV D000","NHA86M","NHA86M","0","PANEL ASSY,R SIDE","1513","2026/02/12","5","64600MKVD00ZG" +"K*SP**","PO","SP","MKV","64600MKV D000","PB417M","PB417M","0","PANEL ASSY,R SIDE","1513","2026/02/26","15","64600MKVD00ZB" +"K*SP**","PO","SP","MKV","64600MKV D000","YR386M","YR386M","","PANEL ASSY,R SIDE","1513","2026/02/17","5","64600MKVD00ZH" +"K*SP**","PO","SP","MKV","64620MKV D010 01","NHA86M","NHA86M","","COVER ASSY,R PIVOT","1513","2026/02/12","10","64620MKVD01ZD" +"K*SP**","PO","SP","MKV","64650MKV D000","NHB01","NHB01","0","PANEL ASSY,L SIDE","1513","2026/02/11","5","64650MKVD00ZD" +"K*SP**","PO","SP","MKV","64650MKV D000","PB417M","PB417M","0","PANEL ASSY,L SIDE","1513","2026/02/27","5","64650MKVD00ZB" +"K*SP**","PO","SP","MKV","64670MKV D010","NHC08M","NHC08M","0","COVER ASSY,L PIVOT","1513","2026/02/23","5","64670MKVD01ZB" +"K*SP**","PO","SP","MKZ","77210MKZ J300 01","TYPE1","R380","0","SET ILLUS,SEAT RR COWL","1513","2026/02/10","20","77210MKZJ30ZA" +"K*SP**","PO","SP","MKZ","77210MKZ J300 01","TYPE1","R380","0","SET ILLUS,SEAT RR COWL","1513","2026/02/11","20","77210MKZJ30ZA" +"K*SP**","PO","SP","MKT","77211MKT D010","NHA86M","NHA86M","D000AA","COWL,R REAR","1513","2026/02/09","15","77211MKTD01ZG" +"K*SP**","PO","SP","MKT","77211MKT D010","NHC47P","NHC47P","D000AA","COWL,R REAR","1513","2026/02/09","5","77211MKTD01ZB" +"K*SP**","PO","SP","MKT","77211MKT D010","NHC64M","NHC64M","D000AA","COWL,R REAR","1513","2026/02/04","15","77211MKTD01ZF" +"K*SP**","PO","SP","MFP","77220MFP JU00 03","TYPE1 2","NHA66P/R381C","8A+7A+8B+7B+8C","COWL ASSY,REAR","1513","2026/02/03","5","77220MFPJU0ZD" +"K*SP**","PO","SP","MFP","77220MFP JU00 03","TYPE2 2","NHB01/NHC52M","8A+7A+8B+7B+8C","COWL ASSY,REAR","1513","2026/02/04","5","77220MFPJU0ZC" +"K*SP**","PO","SP","MKR","77220MKR D100 02","TYPE2","R380","7B","SET ILLUS,SEAT CENTER COWL","1513","2026/02/23","10","77220MKRD10ZA" +"K*SP**","PO","SP","MKV","77220MKV D500 01","TYPE2","NHA86M","D500AA","SET ILLUS,R REAR COWL","1513","2026/02/12","5","77220MKVD50ZB" +"K*SP**","PO","SP","MLB","77240MLB D800","TYPE1","NHA86M","","SET ILLUS,R REAR COWL A","1513","2026/02/25","5","77240MLBD80ZD" +"K*SP**","PO","SP","MLB","77240MLB D800","TYPE2","NHA86M","","SET ILLUS,R REAR COWL A","1513","2026/02/23","5","77240MLBD80ZC" +"K*SP**","PO","SP","MLB","77240MLB D800","TYPE3","NHC65M","","SET ILLUS,R REAR COWL A","1513","2026/02/12","5","77240MLBD80ZB" +"K*SP**","PO","SP","MLB","77240MLB D800","TYPE4 1","NHD19M","","SET ILLUS,R REAR COWL A","1513","2026/02/13","5","77240MLBD80ZE" +"K*SP**","PO","SP","MLB","77240MLB G400","TYPE1","NHB54P","","SET ILLUS,R REAR COWL A","1513","2026/02/04","10","77240MLBG40ZC" +"K*SP**","PO","SP","MLV","77240MLV J100 01","NHB01","NHB01","8A+7B","SET ILLUS,R REAR COWL","1513","2026/02/16","5","77240MLVJ10ZA" +"K*SP**","PO","SP","MLL","77241MLL D001","NHA86M","NHA86M","","COWL,R RR LOWER","1513","2026/02/02","5","77241MLLD00ZD" +"K*SP**","PO","SP","MLB","77250MLB D800","TYPE1","NHA86M","","SET ILLUS,L REAR COWL A","1513","2026/02/26","5","77250MLBD80ZD" +"K*SP**","PO","SP","MLB","77250MLB D800","TYPE2","NHA86M","","SET ILLUS,L REAR COWL A","1513","2026/02/24","5","77250MLBD80ZC" +"K*SP**","PO","SP","MLB","77250MLB D800","TYPE3","NHC65M","","SET ILLUS,L REAR COWL A","1513","2026/02/13","5","77250MLBD80ZB" +"K*SP**","PO","SP","MLB","77250MLB D800","TYPE4 1","NHD19M","","SET ILLUS,L REAR COWL A","1513","2026/02/16","5","77250MLBD80ZE" +"K*SP**","PO","SP","MLB","77250MLB G400","TYPE1","NHB54P","","SET ILLUS,L REAR COWL A","1513","2026/02/05","15","77250MLBG40ZC" +"K*SP**","PO","SP","MLV","77250MLV J000 01","TYPE1 1","NHD19M","8A+7B","SET ILLUS,L REAR COWL","1513","2026/02/16","10","77250MLVJ00ZD" +"K*SP**","PO","SP","MLV","77250MLV J100 01","NHB01","NHB01","8A+7B","SET ILLUS,L REAR COWL","1513","2026/02/17","5","77250MLVJ10ZA" +"K*SP**","PO","SP","MLL","77251MLL D001","NHA86M","NHA86M","","COWL,L RR LOWER","1513","2026/02/03","10","77251MLLD00ZD" +"K*SP**","PO","SP","MLL","77251MLL D001","NHB53P","NHB53P","","COWL,L RR LOWER","1513","2026/02/18","5","77251MLLD00ZC" +"K*SP**","PO","SP","MKR","77260MKR D100","TYPE1","NHB01","7B","SET ILLUS,REAR CENTER UPPER COWL","1513","2026/02/04","5","77260MKRD10ZB" +"K*SP**","PO","SP","MLL","77260MLL D100","NHA86M","NHA86M","8A","SET ILLUS,REAR UPPER COWL","1513","2026/02/03","10","77260MLLD10ZA" +"K*SP**","PO","SP","MKT","77261MKT D010","NHA86M","NHA86M","D000AA","COWL,L REAR","1513","2026/02/10","10","77261MKTD01ZG" +"K*SP**","PO","SP","MKT","77261MKT D010","NHB01","NHB01","D000AA","COWL,L REAR","1513","2026/02/10","5","77261MKTD01ZD" +"K*SP**","PO","SP","MKT","77261MKT D010","NHB53P","NHB53P","D000AA","COWL,L REAR","1513","2026/02/18","5","77261MKTD01ZK" +"K*SP**","PO","SP","MKT","77261MKT D010","NHC08M","NHC08M","D000AA","COWL,L REAR","1513","2026/02/23","5","77261MKTD01ZC" +"K*SP**","PO","SP","MKT","77261MKT D010","NHC64M","NHC64M","D000AA","COWL,L REAR","1513","2026/02/05","10","77261MKTD01ZF" +"K*SP**","PO","SP","MKT","77261MKT D010","NHD05","NHD05","D000AA","COWL,L REAR","1513","2026/02/26","10","77261MKTD01ZH" +"K*SP**","PO","SP","MKT","77261MKT D010","R380","R380","D000AA","COWL,L REAR","1513","2026/02/24","15","77261MKTD01ZA" +"K*SP**","PO","SP","MKV","77270MKV D500 01","TYPE2","NHA86M","D500AA","SET ILLUS,L REAR COWL","1513","2026/02/17","5","77270MKVD50ZB" +"K*SP**","PO","SP","MKT","77413MKT D000","NHC64M","NHC64M","D000AA","COVER,FUEL LID","1513","2026/02/04","5","77413MKTD00ZD" +"K*SP**","PO","SP","MKT","77413MKT D000","NHD05","NHD05","D000AA","COVER,FUEL LID","1513","2026/02/25","5","77413MKTD00ZG" +"K*SP**","PO","SP","K88","80100K88 J001","B187","B187","0","FENDER,REAR","1513","2026/02/02","10","80100K88J00ZP" +"K*SP**","PO","SP","K88","80100K88 J001","B197M","B197M","0","FENDER,REAR","1513","2026/02/03","5","80100K88J00ZJ" +"K*SP**","PO","SP","K88","80100K88 J001","G142M","G142M","0","FENDER,REAR","1513","2026/02/02","5","80100K88J00ZG" +"K*SP**","PO","SP","K88","80100K88 J001","G208M","G208M","0","FENDER,REAR","1513","2026/02/27","5","80100K88J00ZU" +"K*SP**","PO","SP","K88","80100K88 J001","NHC47P","NHC47P","0","FENDER,REAR","1513","2026/02/05","5","80100K88J00ZT" +"K*SP**","PO","SP","K88","80100K88 J001","YR211","YR211","0","FENDER,REAR","1513","2026/02/18","5","80100K88J00ZB" +"K*SP**","PO","SP","MKZ","80110MKZ J300","TYPE1","R380","0","SHELTER ASSY,FRONT","1513","2026/02/12","15","80110MKZJ30ZB" +"K*SP**","PO","SP","MKZ","80110MKZ J300","TYPE1","R380","0","SHELTER ASSY,FRONT","1513","2026/02/13","15","80110MKZJ30ZB" +"K*SP**","PO","SP","MKZ","80120MKZ J300","R380","R380","8A+7B+8B","SHELTER ASSY,RR","1513","2026/02/12","15","80120MKZJ30ZA" +"K*SP**","PO","SP","MKZ","80120MKZ J300","R380","R380","8A+7B+8B","SHELTER ASSY,RR","1513","2026/02/13","15","80120MKZJ30ZA" +"K*SP**","PO","SP","MKC","80122MKC A001","TYPE1","R367C","7B+8A","COVER ASSY A,R SDLBG RR","1513","2026/02/24","5","80122MKCA00ZA" +"K*SP**","PO","SP","MKC","80122MLJ A000","TYPE2","NHC65M","7B+8A","COVER ASSY A,R SDLBG RR","1513","2026/02/12","5","80122MLJA00ZB" +"K*SP**","PO","SP","MKC","80122MLJ A000","TYPE3","NHB01","7B+8A","COVER ASSY A,R SDLBG RR","1513","2026/02/05","20","80122MLJA00ZA" +"K*SP**","PO","SP","MKC","80122MLJ M500","NHC33P","NHC33P","8A","COVER ASSY A,R SDLBG RR","1513","2026/02/19","5","80122MLJM50ZD" +"K*SP**","PO","SP","MKC","80132MKC A001","TYPE1","R367C","7B+8A","COVER ASSY A,L SDLBG RR","1513","2026/02/25","5","80132MKCA00ZA" +"K*SP**","PO","SP","MKC","80132MKC A001","TYPE4","NHB70M","8A","COVER ASSY A,L SDLBG RR","1513","2026/02/12","5","80132MKCA00ZD" +"K*SP**","PO","SP","MKC","80132MLJ A000","TYPE1","R337M","7B+8A","COVER ASSY A,L SDLBG RR","1513","2026/02/18","15","80132MLJA00ZC" +"K*SP**","PO","SP","MKC","80132MLJ A000","TYPE2","NHC65M","7B+8A","COVER ASSY A,L SDLBG RR","1513","2026/02/13","5","80132MLJA00ZB" +"K*SP**","PO","SP","MKC","80132MLJ A000","TYPE3","NHB01","7B+8A","COVER ASSY A,L SDLBG RR","1513","2026/02/06","10","80132MLJA00ZA" +"K*SP**","PO","SP","MKC","80132MLJ M500","NHA86M","NHA86M","8A","COVER ASSY A,L SDLBG RR","1513","2026/02/04","5","80132MLJM50ZB" +"K*SP**","PO","SP","MKC","80132MLJ M500","NHC33P","NHC33P","8A","COVER ASSY A,L SDLBG RR","1513","2026/02/20","5","80132MLJM50ZD" +"K*SP**","PO","SP","K88","80151K88 J001","R201","R201","スタンダード・ビジネス","COVER,CENTER","1513","2026/02/13","5","80151K88J00ZJ" +"K*SP**","PO","SP","K88","80151K88 J001","Y124P","Y124P","スタンダード・ビジネス","COVER,CENTER","1513","2026/02/19","5","80151K88J00ZA" +"K*SP**","PO","SP","K88","80151K88 J001","YR176","YR176","スタンダード・ビジネス","COVER,CENTER","1513","2026/02/25","5","80151K88J00ZH" +"K*SP**","PO","SP","MKC","81113MKC A002","NHB70M","NHB70M","8A","COVER ASSY,R TRUNK SIDE","1513","2026/02/10","10","81113MKCA00ZA" +"K*SP**","PO","SP","MKC","81113MKC L001","TYPE3","NHC52M","(2R-TR CVR)7B+8A","COVER ASSY,R TRUNK SIDE","1513","2026/02/12","5","81113MKCL00ZA" +"K*SP**","PO","SP","MKC","81113MKC L301","NHC47P","NHC47P","(2R-TR CVR)7B+8A","COVER ASSY,R TRUNK SIDE","1513","2026/02/02","5","81113MKCL30ZA" +"K*SP**","PO","SP","MKC","81113MKC LG00 01","PB417M","PB417M","(2R-TR CVR)7B+8A","COVER ASSY,R TRUNK SIDE","1513","2026/02/02","5","81113MKCLG0ZB" +"K*SP**","PO","SP","MKC","81113MLJ A500","NHC64M","NHC64M","(2R-TR CVR)7B+8A","COVER ASSY,R TRUNK SIDE","1513","2026/02/02","15","81113MLJA50ZA" +"K*SP**","PO","SP","MKC","81115MKC L300","NHC47P","NHC47P","(2CTR TR LWR)7B","SET ILLUS,COVER CTR TRUNK LWR","1513","2026/02/02","5","81115MKCL30ZA" +"K*SP**","PO","SP","MKC","81115MKC LG01","PB417M","PB417M","(2CTR TR LWR)7B","SET ILLUS,COVER CTR TRUNK LWR","1513","2026/02/02","5","81115MKCLG0ZB" +"K*SP**","PO","SP","MKC","81115MLJ A500","NHC64M","NHC64M","(2CTR TR LWR)7B","SET ILLUS,COVER CTR TRUNK LWR","1513","2026/02/02","15","81115MLJA50ZA" +"K*SP**","PO","SP","MKC","81115MLJ M200","TYPE1","R337M","(2CTR TR LWR)7B","SET ILLUS,COVER CTR TRUNK LWR","1513","2026/02/19","5","81115MLJM20ZA" +"K*SP**","PO","SP","MKC","81116MKC L000","YR387MC","YR387MC","","COVER CENTER,TRUNK LWR","1513","2026/02/25","10","81116MKCL00ZR" +"K*SP**","PO","SP","MKC","81120MLJ A200","TYPE2","NHC07M/NHC65M","(2TL)8A+7A+7B+8B(EMB)","SET ILLUS,TRUNK LID","1513","2026/02/05","5","81120MLJA20ZA" +"K*SP**","PO","SP","MKC","81120MLJ M000","TYPE1","NHA30M","(2TL)7B+8A","SET ILLUS,TRUNK LID","1513","2026/02/06","5","81120MLJM00ZA" +"K*SP**","PO","SP","MKC","81120MLJ M200","TYPE1","R337M","(2TL)7B+8A","SET ILLUS,TRUNK LID","1513","2026/02/19","5","81120MLJM20ZA" +"K*SP**","PO","SP","K88","81130K88 B500","TYPE1","G208M","クロスカブ","SET ILLUS,R MAIN PIPE COVER","1513","2026/02/27","5","81130K88B50ZD" +"K*SP**","PO","SP","K88","81140K88 B210","TYPE1","NHB01","クロスカブ くまモン","SET ILLUS,L MAIN PIPE COVER","1513","2026/02/27","5","81140K88B21ZA" +"K*SP**","PO","SP","K88","81140K88 B500","TYPE3","PB417M","クロスカブ","SET ILLUS,L MAIN PIPE COVER","1513","2026/02/03","5","81140K88B50ZB" +"K*SP**","PO","SP","MKC","81213MKC A002","NHB70M","NHB70M","8A","COVER ASSY,L TRUNK SIDE","1513","2026/02/11","10","81213MKCA00ZA" +"K*SP**","PO","SP","MKC","81213MKC L001","TYPE3","NHC52M","(2L-TR CVR)7B+8A","COVER ASSY,L TRUNK SIDE","1513","2026/02/13","5","81213MKCL00ZA" +"K*SP**","PO","SP","MKC","81213MKC L301","NHC47P","NHC47P","(2L-TR CVR)7B+8A","COVER ASSY,L TRUNK SIDE","1513","2026/02/03","5","81213MKCL30ZA" +"K*SP**","PO","SP","MKC","81213MKC LG00 01","PB417M","PB417M","(2L-TR CVR)7B+8A","COVER ASSY,L TRUNK SIDE","1513","2026/02/03","5","81213MKCLG0ZB" +"K*SP**","PO","SP","MKC","81213MLJ A500","NHC64M","NHC64M","(2L-TR CVR)7B+8A","COVER ASSY,L TRUNK SIDE","1513","2026/02/03","15","81213MLJA50ZA" +"K*SP**","PO","SP","MKC","81213MLJ M700","YR387M","YR387M","8A+7B+8B","COVER ASSY,L TRUNK SIDE","1513","2026/02/25","5","81213MLJM70ZA" +"K*SP**","PO","SP","MKC","81320MKC EC00 01","TYPE3","NH463M","7B+8A(EMB)","SET ILLUS,R SADDLEBAG LID","1513","2026/02/04","5","81320MKCEC0ZA" +"K*SP**","PO","SP","MLA","81320MLA A300","NHC52M","NHC52M","","LID OUTER,R SADDLEBAG","1513","2026/02/12","10","81320MLAA30ZB" +"K*SP**","PO","SP","MKC","81320MLJ M200","R337M","R337M","8A+7B+8B(EMB)","SET ILLUS,R SADDLEBAG LID","1513","2026/02/17","5","81320MLJM20ZA" +"K*SP**","PO","SP","MKC","81320MLJ M500","NHA86M","NHA86M","8A","SET ILLUS,R SADDLEBAG LID","1513","2026/02/03","10","81320MLJM50ZA" +"K*SP**","PO","SP","MKC","81320MLJ M700","YR387M","YR387M","8A+7B+8B(EMB)","SET ILLUS,R SADDLEBAG LID","1513","2026/02/24","10","81320MLJM70ZA" +"K*SP**","PO","SP","MLA","81363MLA A301","G208M","G208M","","PANEL,R SADDLEBAG","1513","2026/02/27","5","81363MLAA30ZF" +"K*SP**","PO","SP","MLA","81363MLA A301","NHC65M","NHC65M","","PANEL,R SADDLEBAG","1513","2026/02/12","5","81363MLAA30ZC" +"K*SP**","PO","SP","MLA","81420MLA A300","NHC52M","NHC52M","","LID OUTER,L SADDLEBAG","1513","2026/02/13","5","81420MLAA30ZB" +"K*SP**","PO","SP","MKC","81420MLJ M200","R337M","R337M","8A+7B+8B(EMB)","SET ILLUS,L SADDLEBAG LID","1513","2026/02/18","5","81420MLJM20ZA" +"K*SP**","PO","SP","MKC","81420MLJ M500","NHA86M","NHA86M","8A","SET ILLUS,L SADDLEBAG LID","1513","2026/02/04","10","81420MLJM50ZA" +"K*SP**","PO","SP","MLA","81463MLA A301","NHC52M","NHC52M","","PANEL,L SADDLEBAG","1513","2026/02/13","10","81463MLAA30ZB" +"K*SP**","PO","SP","MLA","81463MLA A301","NHC65M","NHC65M","","PANEL,L SADDLEBAG","1513","2026/02/13","5","81463MLAA30ZC" +"K*SP**","PO","SP","MKC","81491MLJ M500","YR387MC","YR387MC","8A","COVER ASSY,L SADDLEBAG UP","1513","2026/02/25","5","81491MLJM50ZC" +"K*SP**","PO","SP","MKC","81520MKC A100","NH463M","NH463M","7B","SET ILLUS,RR TOP LID R","1513","2026/02/04","5","81520MKCA10ZN" +"K*SP**","PO","SP","MKC","81520MKC A100","TYPE1","R367C","7B","SET ILLUS,RR TOP LID R","1513","2026/02/24","10","81520MKCA10ZC" +"K*SP**","PO","SP","MKC","81520MLJ A000","NHC65M","NHC65M","7B","SET ILLUS,RR TOP LID R","1513","2026/02/05","5","81520MLJA00ZB" +"K*SP**","PO","SP","MKC","81525MKC A100","NH463M","NH463M","7B","SET ILLUS,RR TOP LID L","1513","2026/02/05","5","81525MKCA10ZN" +"K*SP**","PO","SP","MKC","81525MLJ A000","NHC65M","NHC65M","7B","SET ILLUS,RR TOP LID L","1513","2026/02/06","5","81525MLJA00ZB" +"K*SP**","PO","SP","MKC","81550MKC A100","NHA86M","NHA86M","","COVER,CTR RR TOP","1513","2026/02/04","5","81550MKCA10ZK" +"K*SP**","PO","SP","MKC","81551MKC A100","NHA86M","NHA86M","","LID R,RR TOP","1513","2026/02/03","15","81551MKCA10ZK" +"K*SP**","PO","SP","MKC","81555MKC A100","NHA86M","NHA86M","","COVER,INNER RR TOP","1513","2026/02/04","15","81555MKCA10ZK" +"K*SP**","PO","SP","MKC","81556MKC A100","NHA86M","NHA86M","","LID L,RR TOP","1513","2026/02/04","5","81556MKCA10ZK" +"K*SP**","PO","SP","MKC","81570MKC A100","NHA86M","NHA86M","","COVER,END RR TOP","1513","2026/02/04","5","81570MKCA10ZK" +"K*SP**","PO","SP","MKC","83140MLJ E100","TYPE1","NHB01","7B(E700)","SET ILLUS,L SIDE SHELTER","1513","2026/02/06","5","83140MLJE10ZC" +"K*SP**","PO","SP","K64","83160K64 JH01","TYPE2","NHB53P","0","SET ILLUS,R TANK COVER","1513","2026/02/26","5","83160K64JH0ZA" +"K*SP**","PO","SP","K64","83170K64 J210 01","TYPE1","NH436M","旧型","SET ILLUS,L TANK COVER","1513","2026/02/27","5","83170K64J21ZB" +"K*SP**","PO","SP","K64","83170K64 JM00","NHB53P","NHB53P","","SET ILLUS,L TANK COVER","1513","2026/02/27","10","83170K64JM0ZA" +"K*SP**","PO","SP","MKR","83170MKR DH00","R380","R380","8A+7B+8B","COVER ASSY,L SIDE","1513","2026/02/26","10","83170MKRDH0ZA" +"K*SP**","PO","SP","MLM","83180MLM E000","TYPE1","NHB01","7B","SET ILLUS,R SIDE SHELTER","1513","2026/02/19","25","83180MLME00ZC" +"K*SP**","PO","SP","MLM","83180MLM E000","TYPE2","NHC33P","7B","SET ILLUS,R SIDE SHELTER","1513","2026/02/19","25","83180MLME00ZB" +"K*SP**","PO","SP","MLM","83180MLM E000","TYPE3","NHC47P","7B","SET ILLUS,R SIDE SHELTER","1513","2026/02/10","25","83180MLME00ZA" +"K*SP**","PO","SP","MLM","83190MLM E000","TYPE1","NHB01","7B","SET ILLUS,L SIDE SHELTER","1513","2026/02/20","25","83190MLME00ZC" +"K*SP**","PO","SP","MLM","83190MLM E000","TYPE2","NHC33P","7B","SET ILLUS,L SIDE SHELTER","1513","2026/02/20","25","83190MLME00ZB" +"K*SP**","PO","SP","MLM","83190MLM E000","TYPE3","NHC47P","7B","SET ILLUS,L SIDE SHELTER","1513","2026/02/11","25","83190MLME00ZA" +"K*SP**","PO","SP","MLM","83510MLM E000","TYPE1","NHB01","8A+7B+8B","COVER A ASSY,R SIDE","1513","2026/02/23","15","83510MLME00ZC" +"K*SP**","PO","SP","MLM","83510MLM E000","TYPE2","NHC33P","8A+7B+8B","COVER A ASSY,R SIDE","1513","2026/02/19","15","83510MLME00ZB" +"K*SP**","PO","SP","MLM","83510MLM E000","TYPE3 2","NHC47P","8A+7B+8B","COVER A ASSY,R SIDE","1513","2026/02/10","15","83510MLME00ZD" +"K*SP**","PO","SP","MKW","83520MKW D000","TYPE1","NHA86M","7B","SET ILLUS,R SIDE SHELTER","1513","2026/02/19","5","83520MKWD00ZD" +"K*SP**","PO","SP","MKW","83520MKW D000","TYPE2","NHB53P","7B","SET ILLUS,R SIDE SHELTER","1513","2026/02/17","5","83520MKWD00ZC" +"K*SP**","PO","SP","MKW","83520MKW D000","TYPE4","B197M","7B","SET ILLUS,R SIDE SHELTER","1513","2026/02/04","5","83520MKWD00ZA" +"K*SP**","PO","SP","MLM","83520MLM E000","TYPE1","YR396M","7B","SET ILLUS,R SIDE COVER B","1513","2026/02/06","15","83520MLME00ZC" +"K*SP**","PO","SP","MLM","83520MLM E000","TYPE2","NHB01","7B","SET ILLUS,R SIDE COVER B","1513","2026/02/19","15","83520MLME00ZB" +"K*SP**","PO","SP","MLM","83520MLM E000","TYPE3","NHC08M","7B","SET ILLUS,R SIDE COVER B","1513","2026/02/26","15","83520MLME00ZA" +"K*SP**","PO","SP","K3R","83530K3R J000 02","NH389M","NH389M","","SET ILLUS,R SIDE COVER","1513","2026/02/25","5","83530K3RJ00ZE" +"K*SP**","PO","SP","K3R","83530K3R J000 02","Y248","Y248","","SET ILLUS,R SIDE COVER","1513","2026/02/18","5","83530K3RJ00ZD" +"K*SP**","PO","SP","MLM","83600MLM E000","TYPE1","NHB01","8A+7B","SET ILLUS,L SIDE COVER A","1513","2026/02/24","15","83600MLME00ZF" +"K*SP**","PO","SP","MLM","83600MLM E000","TYPE2","NHC33P","8A+7B","SET ILLUS,L SIDE COVER A","1513","2026/02/20","15","83600MLME00ZE" +"K*SP**","PO","SP","MLM","83600MLM E000","TYPE3 1","NHC47P","8A+7B","SET ILLUS,L SIDE COVER A","1513","2026/02/11","15","83600MLME00ZG" +"K*SP**","PO","SP","MLN4","83600MLN ER00","NHC64M","NHC64M","4型 8A","COWL ASSY,R RR SIDE","1513","2026/02/06","5","83600MLNER0ZA" +"K*SP**","PO","SP","MKS1","83610MLG E500","TYPE1","B197M","1型 8A+7B","SET ILLUS,R RR SIDE COWL A","1513","2026/02/04","5","83610MLGE50ZA" +"K*SP**","PO","SP","MKC","83610MLJ A000","TYPE1","NHB01","7B","SET ILLUS,R SIDE COVER","1513","2026/02/05","5","83610MLJA00ZC" +"K*SP**","PO","SP","MKC","83610MLJ AA00","TYPE2","G208M","7B","SET ILLUS,R SIDE COVER","1513","2026/02/27","5","83610MLJAA0ZA" +"K*SP**","PO","SP","MLV","83610MLV J000","TYPE1 1","NHD19M","8A+7B","SET ILLUS,R SIDE COVER","1513","2026/02/13","5","83610MLVJ00ZD" +"K*SP**","PO","SP","MKC","83611MKC A000","NH389M","NH389M","0","COVER A,R SIDE","1513","2026/02/24","5","83611MKCA00ZW" +"K*SP**","PO","SP","MKC","83611MKC A000","NHA86M","NHA86M","0","COVER A,R SIDE","1513","2026/02/03","10","83611MKCA00ZH" +"K*SP**","PO","SP","MKPX","83611MKP J800","NHB70M","NHB70M","J800AA","COVER A,L SIDE","1513","2026/02/12","5","83611MKPJ80ZD" +"K*SP**","PO","SP","MLF","83611MLF E800","PB409PC","PB409PC","E800AA","COWL A,R RR SIDE","1513","2026/02/27","15","83611MLFE80ZB" +"K*SP**","PO","SP","MKW","83620MKW D000","TYPE3","R380","7B","SET ILLUS,L SIDE SHELTER","1513","2026/02/24","5","83620MKWD00ZB" +"K*SP**","PO","SP","MLM","83620MLM E000","TYPE1","YR396M","7B","SET ILLUS,L SIDE COVER B","1513","2026/02/09","15","83620MLME00ZC" +"K*SP**","PO","SP","MLM","83620MLM E000","TYPE2","NHB01","7B","SET ILLUS,L SIDE COVER B","1513","2026/02/20","15","83620MLME00ZB" +"K*SP**","PO","SP","MLM","83620MLM E000","TYPE3","NHC08M","7B","SET ILLUS,L SIDE COVER B","1513","2026/02/27","15","83620MLME00ZA" +"K*SP**","PO","SP","MKW","83621MKW D700","NHB54P","NHB54P","D700AA","SHELTER,L SIDE","1513","2026/02/05","5","83621MKWD70ZC" +"K*SP**","PO","SP","K3R","83630K3R J000 02","NH389M","NH389M","カット","SET ILLUS,L SIDE COVER","1513","2026/02/26","5","83630K3RJ00ZE" +"K*SP**","PO","SP","K3R","83630K3R J000 02","Y248","Y248","カット","SET ILLUS,L SIDE COVER","1513","2026/02/19","5","83630K3RJ00ZD" +"K*SP**","PO","SP","K64","83635K64 JH01","TYPE1","NHB01","23YM","SET ILLUS,L REAR COWL","1513","2026/02/27","20","83635K64JH0ZB" +"K*SP**","PO","SP","K64","83650K64 NP00","NH389M","NH389M","25YM","COVER,SEAT LOCK","1513","2026/02/27","3","83650K64NP0ZF" +"K*SP**","PO","SP","MKS1","83650MKS E000 04","TYPE1","NHA86M","1型 7B","SET ILLUS,R RR SIDE COWL C","1513","2026/02/05","10","83650MKSE00ZA" +"K*SP**","PO","SP","MJC","83701MJC A000","R380","R380","0","COVER,L SIDE","1513","2026/02/26","5","83701MJCA00ZD" +"K*SP**","PO","SP","MKC","83710MLJ M200","TYPE1","R337M","7B","SET ILLUS,L SIDE COVER","1513","2026/02/18","5","83710MLJM20ZA" +"K*SP**","PO","SP","MKC","83711MKC A000","NH389M","NH389M","0","COVER A,L SIDE","1513","2026/02/26","5","83711MKCA00ZW" +"K*SP**","PO","SP","MKC","83711MKC A000","YR387MC","YR387MC","0","COVER A,L SIDE","1513","2026/02/25","5","83711MKCA00ZV" +"K*SP**","PO","SP","GJB","83712GJB J000","NHC08M","NHC08M","0","COVER,RR CENTER","1513","2026/02/20","10","83712GJBJ00YB" +"K*SP**","PO","SP","GX1","83712GJB J000","R134","R134","0","COVER,RR CENTER","1513","2026/02/23","5","83712GJBJ00ZT" +"K*SP**","PO","SP","MKS1","83750MKS E000 04","TYPE1","NHA86M","1型 7B","SET ILLUS,L RR SIDE COWL C","1513","2026/02/06","5","83750MKSE00ZA" +"K*SP**","PO","SP","MKC","88130MLJ M000 01","YR387MC","YR387MC","(ミネベア素材)","COVER,R MIRROR","1513","2026/02/24","15","88130MLJM00ZE" +"K*SP**","PO","SP","MKC","88135MKC A000 01","TYPE1","R367C","7B","SET ILLUS,R MIRROR COVER","1513","2026/02/24","5","88135MKCA00ZE" +"K*SP**","PO","SP","MKC","88135MKC A000 01","TYPE2","NHB53P","7B","SET ILLUS,R MIRROR COVER","1513","2026/02/13","5","88135MKCA00ZD" +"K*SP**","PO","SP","MKC","88135MKC A000 01","TYPE3","YR347P","7B","SET ILLUS,R MIRROR COVER","1513","2026/02/03","5","88135MKCA00ZC" +"K*SP**","PO","SP","MKC","88135MKC A000 01","TYPE4","NHB70M","0","SET ILLUS,R MIRROR COVER","1513","2026/02/10","5","88135MKCA00ZB" +"K*SP**","PO","SP","MKC","88135MKC A000 01","TYPE5","NH463M","7B","SET ILLUS,R MIRROR COVER","1513","2026/02/04","25","88135MKCA00ZA" +"K*SP**","PO","SP","MKC","88135MKC A000 01","TYPE6","PB409P","7B","SET ILLUS,R MIRROR COVER","1513","2026/02/10","5","88135MKCA00ZF" +"K*SP**","PO","SP","MKC","88135MKC L200","TYPE1","NHC33P","(KENSEI)7B","SET ILLUS,R MIRROR COVER","1513","2026/02/19","10","88135MKCL20ZA" +"K*SP**","PO","SP","MKC","88135MLJ M000 01","TYPE1","NHA30M","(ミネベア素材)7B","SET ILLUS,R MIRROR COVER","1513","2026/02/06","5","88135MLJM00ZA" +"K*SP**","PO","SP","MKC","88135MLJ M200 01","TYPE1","R337M","(ミネベア素材)7B","SET ILLUS,R MIRROR COVER","1513","2026/02/17","20","88135MLJM20ZA" +"K*SP**","PO","SP","MKC","88140MLJ M000 01","YR387MC","YR387MC","(ミネベア素材)","COVER,L MIRROR","1513","2026/02/25","5","88140MLJM00ZE" +"K*SP**","PO","SP","MKC","88145MKC A000 01","TYPE1","R367C","7B","SET ILLUS,L MIRROR COVER","1513","2026/02/25","15","88145MKCA00ZE" +"K*SP**","PO","SP","MKC","88145MKC A000 01","TYPE2","NHB53P","7B","SET ILLUS,L MIRROR COVER","1513","2026/02/16","20","88145MKCA00ZD" +"K*SP**","PO","SP","MKC","88145MKC A000 01","TYPE3","YR347P","7B","SET ILLUS,L MIRROR COVER","1513","2026/02/02","10","88145MKCA00ZC" +"K*SP**","PO","SP","MKC","88145MKC A000 01","TYPE4","NHB70M","0","SET ILLUS,L MIRROR COVER","1513","2026/02/11","5","88145MKCA00ZB" +"K*SP**","PO","SP","MKC","88145MKC A000 01","TYPE5","NH463M","7B","SET ILLUS,L MIRROR COVER","1513","2026/02/05","10","88145MKCA00ZA" +"K*SP**","PO","SP","MKC","88145MKC A000 01","TYPE6","PB409P","7B","SET ILLUS,L MIRROR COVER","1513","2026/02/11","10","88145MKCA00ZF" +"K*SP**","PO","SP","MKC","88145MLJ A000","TYPE1","NHB01","7B","SET ILLUS,L MIRROR COVER","1513","2026/02/06","25","88145MLJA00ZA" +"K*SP**","PO","SP","MKC","88145MLJ AR00","TYPE1","NHC47P","(ミネベア素材)7B","SET ILLUS,L MIRROR COVER","1513","2026/02/06","10","88145MLJAR0ZD" +"K*SP**","PO","SP","MKC","88145MLJ M000 01","TYPE1","NHA30M","(ミネベア素材)7B","SET ILLUS,L MIRROR COVER","1513","2026/02/09","5","88145MLJM00ZA" +"K*SP**","PO","SP","MKC","88145MLJ M200 01","TYPE1","R337M","(ミネベア素材)7B","SET ILLUS,L MIRROR COVER","1513","2026/02/18","5","88145MLJM20ZA" diff --git a/docs/060 データ/20260310-163249_PoSpPlan_20260310_163249(BOM付き).csv b/docs/060 データ/20260310-163249_PoSpPlan_20260310_163249(BOM付き).csv new file mode 100644 index 0000000..0e03b67 --- /dev/null +++ b/docs/060 データ/20260310-163249_PoSpPlan_20260310_163249(BOM付き).csv @@ -0,0 +1,622 @@ +PlanCd,HaraiMoto,HaraiSaki,ModelCd,SeppenBuban,TargetColor,KakoColor,Biko,Buhinmei,KoteiCd,SeisanHiduke,Daisu,SpBuban +"K*SP**","PO","AF","K88","53215K88 J000 03","NH388","NH388","スタンダード","COVER ASSY,HNDL UPPER","1521","2026/02/20","10","53215K88J00ZD" +"K*SP**","PO","AF","K88","53215K88 J000 03","PB394M","PB394M","スタンダード","COVER ASSY,HNDL UPPER","1521","2026/02/06","20","53215K88J00ZC" +"K*SP**","PO","AF","K88","53215K88 J000 03","Y124P","Y124P","スタンダード","COVER ASSY,HNDL UPPER","1521","2026/02/19","10","53215K88J00ZA" +"K*SP**","PO","AF","K88","53215K88 J000 03","Y163P","Y163P","スタンダード","COVER ASSY,HNDL UPPER","1521","2026/02/09","5","53215K88J00ZK" +"K*SP**","PO","AF","MKA1.3","61100MGS D301 02","NHB01","NHB01","1・3型","FENDER COMP,FR","1521","2026/02/04","25","61100MGSD30ZF" +"K*SP**","PO","AF","K88","61500K88 J001","Y163P","Y163P","スタンダード","COVER ASSY,R FR FORK","1521","2026/02/06","5","61500K88J00ZL" +"K*SP**","PO","AF","K88","61500K88 J001","YR211","YR211","スタンダード","COVER ASSY,R FR FORK","1521","2026/02/18","10","61500K88J00ZB" +"K*SP**","PO","AF","K88","61600K88 J001","Y163P","Y163P","スタンダード","COVER ASSY,L FR FORK","1521","2026/02/09","10","61600K88J00ZL" +"K*SP**","PO","AF","K88","61600K88 J001","YR211","YR211","スタンダード","COVER ASSY,L FR FORK","1521","2026/02/19","10","61600K88J00ZB" +"K*SP**","PO","AF","MKYJ","64100MKY E000","NHA86M","NHA86M","MKY E000AA","COWL COMP,FR UPPER","1521","2026/02/19","5","64100MKYE00ZB" +"K*SP**","PO","AF","MLA","64205MLA A301 01","NHC65M","NHC65M","0","COWL ASSY,FR","1521","2026/02/12","15","64205MLAA30ZD" +"K*SP**","PO","AF","MLA","64300MLA AH00 02","NHC47P","NHC47P","","COWL ASSY,HEAD LIGHT","1521","2026/02/09","20","64300MLAAH0ZD" +"K*SP**","PO","AF","MLN4","64300MLN ER00","NHC64M","NHC64M","4型 8A ストのみ","COWL ASSY,R MIDDLE","1521","2026/02/06","15","64300MLNER0ZA" +"K*SP**","PO","AF","MLN4","64300MLN ET00 01","NHB53P","NHB53P","4型 8A+7B ラバーなし","COWL ASSY,R MIDDLE","1521","2026/02/19","15","64300MLNET0ZA" +"K*SP**","PO","AF","MLL","64335MLL D000 01","TYPE4","NHA86M","8A","COVER ASSY,R FUEL TANK","1521","2026/02/02","15","64335MLLD00ZA" +"K*SP**","PO","AF","MKC","81200MKC A102","NHB70M","NHB70M","IN LID + TL_OLD","LID ASSY,TRUNK","1521","2026/02/09","10","81200MKCA10ZA" +"K*SP**","PO","AF","MKC","81200MKC L301","NHA86M","NHA86M","7B (IN LID + 2TL +R/L TL CVR)","LID ASSY,TRUNK(NEW)","1521","2026/02/02","5","81200MKCL30ZA" +"K*SP**","PO","AF","MKC","81200MKC LG00","NHC33P","NHC33P","7B (IN LID + 2TL +R/L TL CVR)","LID ASSY,TRUNK(NEW)","1521","2026/02/12","10","81200MKCLG0ZB" +"K*SP**","PO","AF","MKC","81200MKC LG00","NHC33P","NHC33P","7B (IN LID + 2TL +R/L TL CVR)","LID ASSY,TRUNK(NEW)","1521","2026/02/13","10","81200MKCLG0ZB" +"K*SP**","PO","AF","MKC","81200MKC LG00","NHC33P","NHC33P","7B (IN LID + 2TL +R/L TL CVR)","LID ASSY,TRUNK(NEW)","1521","2026/02/16","10","81200MKCLG0ZB" +"K*SP**","PO","AF","MKC","81200MKC LG00","NHC33P","NHC33P","7B (IN LID + 2TL +R/L TL CVR)","LID ASSY,TRUNK(NEW)","1521","2026/02/17","10","81200MKCLG0ZB" +"K*SP**","PO","AF","MKC","81200MKC LG00","NHC33P","NHC33P","7B (IN LID + 2TL +R/L TL CVR)","LID ASSY,TRUNK(NEW)","1521","2026/02/18","10","81200MKCLG0ZB" +"K*SP**","PO","AF","MLA","81300MLA A300 08","NHC65M","NHC65M","LID + PANEL","SADDLEBAG ASSY,R","1521","2026/02/16","16","81300MLAA30ZC" +"K*SP**","PO","AF","MLA","81400MLA A300 08","NHC65M","NHC65M","LID + PANEL","SADDLEBAG ASSY,L","1521","2026/02/17","20","81400MLAA30ZC" +"K*SP**","PO","AF","MKC","81560MKC A102","NH463M","NH463M","7B (CTR+INN+END)","COVER ASSY,CTR RR TOP","1521","2026/02/04","5","81560MKCA10ZH" +"K*SP**","PO","AF","MKC","81560MLJ A000","NHC65M","NHC65M","7B (CTR+INN+END)","COVER ASSY,CTR RR TOP","1521","2026/02/05","5","81560MLJA00ZB" +"K*SP**","PO","AF","MKC","83105MLJ M000","TYPE1","NHA30M","7B","LID ASSY,FUEL","1521","2026/02/06","5","83105MLJM00ZA" +"K*SP**","PO","AF","MKC","83210MKC A002","TYPE4","NHB70M","LID + BUTTON","CENTER POCKET ASSY","1521","2026/02/09","5","83210MKCA00ZF" +"K*SP**","PO","AF","MLN1","83600MLN E300 02","TYPE2","NHB53P","1型 8A+7B","COWL ASSY,R RR SIDE","1521","2026/02/19","5","83600MLNE30ZA" +"K*SP**","PO","AF","GAG","64300GFZ J000 02","NH138","NH138","0","COVER,SET ILLUST FRONT","1521","2026/02/04","30","64300GFZJ00ZA" +"K*SP**","PO","AF","KSE","80010KSE 3060","TYPE1","R292R","0","FENDER SET ILLUST,REAR","1521","2026/02/03","8","80010KSE306ZA" +"K*SP**","PO","AF","KSE","80010KSE 3060","TYPE1","R292R","0","FENDER SET ILLUST,REAR","1521","2026/02/18","7","80010KSE306ZA" +"K*SP**","PO","AF","KSE","80101KSE A301","TYPE1","R292R","0","SET ILLUST,REAR FENDER","1521","2026/02/03","15","80101KSEA30ZA" +"K*SP**","PO","AF","KSE","80101KSE A301","TYPE1","R292R","0","SET ILLUST,REAR FENDER","1521","2026/02/18","15","80101KSEA30ZA" +"K*SP**","PO","AF","MKC","81100MKC L310","","","BOX LWR + BOX UPR","TRUNK SUB ASSY","1521","2026/02/09","25","81100MKCL31" +"K*SP**","PO","AF","MKC","81100MKC L310","","","BOX LWR + BOX UPR","TRUNK SUB ASSY","1521","2026/02/25","5","81100MKCL31" +"K*SP**","PO","AF","K88","83701K88 L203 01","T23","T23","スタンダード","COVER COMP,L BODY","1521","2026/02/04","5","83701K88L20ZA" +"K*SP**","PO","SP","KSE","19071KSE V100","TYPE1","R292R","","SET ILLUST,R TANK SHROUD","1513","2026/02/16","5","19071KSEV10ZA" +"K*SP**","PO","SP","MCT","50611MEF J000AB","","SOZAI","教習車","SKIRT R RLOOR(KAKOU)","1513","2026/02/25","5","50611MEFJ00AB" +"K*SP**","PO","SP","MKE","51710MKE AU00","TYPE1","R292R","0","SET ILLUS,R FR FORK PROTECTOR","1513","2026/02/17","5","51710MKEAU0ZA" +"K*SP**","PO","SP","KVZ","61100KVZ 6300AA","","SOZAI","0","FRONT FENDER(SOZAI)","1513","2026/02/26","5","61100KVZ630AA" +"K*SP**","PO","SP","MFL","61100MFL 0000AB","","SOZAI","0","FENDER FRONT(SANDING)","1513","2026/02/03","5","61100MFL000AB" +"K*SP**","PO","SP","MKA1.3","61100MGS D302AB","","SOZAI","1・3型","FENDER FR(SANDING)","1513","2026/02/02","40","61100MGSD30AB" +"K*SP**","PO","SP","MKA1.3","61100MGS D302AB","","SOZAI","1・3型","FENDER FR(SANDING)","1513","2026/02/03","25","61100MGSD30AB" +"K*SP**","PO","SP","MCA","61101MCA 0000AB","","SOZAI","0","FENDER,FR(SANDING)","1513","2026/02/03","5","61101MCA000AB" +"K*SP**","PO","SP","MCA","61103MCA 0000AB","","SOZAI","0","FENDER,FR,B(SANDING)","1513","2026/02/09","40","61103MCA000AB" +"K*SP**","PO","SP","MCA","61103MCA A80120","","SOZAI","ABS","FENDER","1513","2026/02/26","5","61103MCAA8020" +"K*SP**","PO","SP","HP1","61110HP1 60002101","NH196","NH196","0","SHROUD,R","1513","2026/02/23","40","61110HP1600ZC" +"K*SP**","PO","SP","HP1","61120HP1 60002101","NH196","NH196","0","FENDER,R","1513","2026/02/24","40","61120HP1600ZC" +"K*SP**","PO","SP","V61","61151V61 J000 01","","","0","COVER,MOTOR","1513","2026/02/12","10","61151V61J00" +"K*SP**","PO","SP","V61","61151V61 J000 01","","","0","COVER,MOTOR","1513","2026/02/13","10","61151V61J00" +"K*SP**","PO","SP","MW3","61301MW3 A900","NH1","NH1","MFM","CASE HEAD LIGHT","1513","2026/02/09","15","61301MW3A90ZA" +"K*SP**","PO","SP","MCA","64110MCA S400AB","","SOZAI","0","GARNISH SCREEN(SANDING)","1513","2026/02/19","10","64110MCAS40AB" +"K*SP**","PO","SP","MKC","64110MKC A000AB","","SOZAI","","GARNISH A,SCREEN(SANDING)","1513","2026/02/26","25","64110MKCA00AB" +"K*SP**","PO","SP","MKV","64111MKV D000AA","","SOZAI","0","COWL,FRONT(SOZAI)","1513","2026/02/20","5","64111MKVD00AA" +"K*SP**","PO","SP","MGE","64130MGE 0000AB","","SOZAI","0","COWL R UPPER SIDE(SANDING)","1513","2026/02/11","5","64130MGE000AB" +"K*SP**","PO","SP","MJR","64160MJR 6700AB","","SOZAI","0","COVER L FORK FR(SANDING)","1513","2026/02/16","5","64160MJR670AB" +"K*SP**","PO","SP","MGP","64211MGP D000AB","","SOZAI","0","COWL UPPER(SANDING)","1513","2026/02/17","5","64211MGPD00AB" +"K*SP**","PO","SP","MKT","64211MKT D000AB","","SOZAI","D000AA 旧型","COWL,UPPER(SANDING)","1513","2026/02/20","25","64211MKTD00AB" +"K*SP**","PO","SP","MLB","64215MLB D000AB","","SOZAI","","COWL R,HEAD LIGHT SIDE(SANDING)","1513","2026/02/25","10","64215MLBD00AB" +"K*SP**","PO","SP","MCA","64216MCA 0000AA","","SOZAI","0","COWL,FR CENTER(SOZAI)","1513","2026/02/25","5","64216MCA000AA" +"K*SP**","PO","SP","GAG","64220GAG 7512","NH187R","NH187R","0","ROOF","1513","2026/02/04","30","64220GAG751ZB" +"K*SP**","PO","SP","GAG","64220GAG 7512","NH187R","NH187R","0","ROOF","1513","2026/02/05","30","64220GAG751ZB" +"K*SP**","PO","SP","MKV","64221MKV D000AA","","SOZAI","0","COVER,FR INNER(SOZAI)","1513","2026/02/20","5","64221MKVD00AA" +"K*SP**","PO","SP","MLB","64225MLB D000AB","","SOZAI","","COWL L,HEAD LIGHT SIDE(SANDING)","1513","2026/02/12","15","64225MLBD00AB" +"K*SP**","PO","SP","MFM","64231MFM C300AB","","SOZAI","J000AA","COWL,L SIDE(SANDING)","1513","2026/02/16","5","64231MFMC30AB" +"K*SP**","PO","SP","MKH","64280MKH D000AB","","SOZAI","0","DUCT,R AIR(SANDING)","1513","2026/02/25","10","64280MKHD00AB" +"K*SP**","PO","SP","MCA","64285MCA S400AB","","SOZAI","0","COWL R MIDDLE(SANDING)","1513","2026/02/13","15","64285MCAS40AB" +"K*SP**","PO","SP","MCA","64285MCA S400AB","","SOZAI","0","COWL R MIDDLE(SANDING)","1513","2026/02/16","5","64285MCAS40AB" +"K*SP**","PO","SP","MGS3","64290MGS D304AB","","SOZAI","旧3型","DUCT,L AIR(SANDING)","1513","2026/02/03","5","64290MGSD30AB" +"K*SP**","PO","SP","MCA","64292MCA S400AB","","SOZAI","0","COWL L SIDE(SANDING)","1513","2026/02/18","10","64292MCAS40AB" +"K*SP**","PO","SP","MCA","64295MCA S400AB","","SOZAI","0","COWL L MIDDLE(SANDING)","1513","2026/02/17","10","64295MCAS40AB" +"K*SP**","PO","SP","GGZ","64301GGZ J001AA","","SOZAI","0","COVER,FR(SOZAI)","1513","2026/02/10","10","64301GGZJ00AA" +"K*SP**","PO","SP","GJA","64301GJA J000AA","","SOZAI","0","COVER,FR(SOZAI)","1513","2026/02/10","45","64301GJAJ00AA" +"K*SP**","PO","SP","GJB","64301GJB J000AA","","SOZAI","0","COVER FR(SOZAI)","1513","2026/02/16","50","64301GJBJ00AA" +"K*SP**","PO","SP","GJB","64301GJB J000AA","","SOZAI","0","COVER FR(SOZAI)","1513","2026/02/17","50","64301GJBJ00AA" +"K*SP**","PO","SP","GJB","64301GJB J000AA","","SOZAI","0","COVER FR(SOZAI)","1513","2026/02/18","50","64301GJBJ00AA" +"K*SP**","PO","SP","GJB","64301GJB J000AA","","SOZAI","0","COVER FR(SOZAI)","1513","2026/02/19","45","64301GJBJ00AA" +"K*SP**","PO","SP","GX1","64301GX1 J000AA","","SOZAI","","COVER FR(SOZAI)","1513","2026/02/02","25","64301GX1J00AA" +"K*SP**","PO","SP","GX1","64301GX1 J000AA","","SOZAI","","COVER FR(SOZAI)","1513","2026/02/03","50","64301GX1J00AA" +"K*SP**","PO","SP","GX1","64301GX1 J000AA","","SOZAI","","COVER FR(SOZAI)","1513","2026/02/04","50","64301GX1J00AA" +"K*SP**","PO","SP","GX1","64301GX1 J000AA","","SOZAI","","COVER FR(SOZAI)","1513","2026/02/05","50","64301GX1J00AA" +"K*SP**","PO","SP","GX1","64301GX1 J000AA","","SOZAI","","COVER FR(SOZAI)","1513","2026/02/06","50","64301GX1J00AA" +"K*SP**","PO","SP","GX1","64301GX1 J000AA","","SOZAI","","COVER FR(SOZAI)","1513","2026/02/09","50","64301GX1J00AA" +"K*SP**","PO","SP","K88","64301K88 J000AA","","SOZAI","スタンダード","COVER,FRONT(SOZAI)","1513","2026/02/09","5","64301K88J00AA" +"K*SP**","PO","SP","MCT","64301MCT 0000AA","","SOZAI","0","COVER,FR (SOZAI)","1513","2026/02/12","8","64301MCT000AA" +"K*SP**","PO","SP","MCT","64301MCT 0000AA","","SOZAI","0","COVER,FR (SOZAI)","1513","2026/02/13","7","64301MCT000AA" +"K*SP**","PO","SP","MFT","64301MFT 6400AA","","SOZAI","0","COVER FRONT(SOZAI)","1513","2026/02/24","5","64301MFT640AA" +"K*SP**","PO","SP","GJB","64303GJB J000AA","","SOZAI","0","COVER,FR TOP(SOZAI)","1513","2026/02/04","10","64303GJBJ00AA" +"K*SP**","PO","SP","GX1","64303GX1 J000AA","","SOZAI","0","COVER FR TOP(SOZAI)","1513","2026/02/02","20","64303GX1J00AA" +"K*SP**","PO","SP","GX1","64303GX1 J000AA","","SOZAI","0","COVER FR TOP(SOZAI)","1513","2026/02/03","20","64303GX1J00AA" +"K*SP**","PO","SP","GX1","64303GX1 J000AA","","SOZAI","0","COVER FR TOP(SOZAI)","1513","2026/02/04","20","64303GX1J00AA" +"K*SP**","PO","SP","GX1","64303GX1 J000AA","","SOZAI","0","COVER FR TOP(SOZAI)","1513","2026/02/05","20","64303GX1J00AA" +"K*SP**","PO","SP","GX1","64303GX1 J000AA","","SOZAI","0","COVER FR TOP(SOZAI)","1513","2026/02/06","10","64303GX1J00AA" +"K*SP**","PO","SP","MGH","64310MGH 6400AB","","SOZAI","0","COWL R MIDDLE(SANDING)","1513","2026/02/06","15","64310MGH640AB" +"K*SP**","PO","SP","MGP","64310MGP D000AB","","SOZAI","0","COWL,R MIDDLE(SANDING)","1513","2026/02/17","5","64310MGPD00AB" +"K*SP**","PO","SP","MFT","64311MFT 6600","NH1","NH1","教習車用","COVER,INNER","1513","2026/02/24","5","64311MFT660ZA" +"K*SP**","PO","SP","MKK","64311MKK D200AB","","SOZAI","0","COWL R,MIDDLE(SANDING)","1513","2026/02/24","15","64311MKKD20AB" +"K*SP**","PO","SP","MKS1","64311MKS E000AB","","SOZAI","","COWL R,MIDDLE(SANDING)","1513","2026/02/25","5","64311MKSE00AB" +"K*SP**","PO","SP","MKS2","64311MKS E200AB","","SOZAI","","COWL R,MIDDLE(SANDING)","1513","2026/02/18","5","64311MKSE20AB" +"K*SP**","PO","SP","MKV","64311MKV D000AB","","SOZAI","","COWL,R FRONT SIDE(SANDING)","1513","2026/02/09","20","64311MKVD00AB" +"K*SP**","PO","SP","MKV","64311MKV D000AB","","SOZAI","","COWL,R FRONT SIDE(SANDING)","1513","2026/02/10","20","64311MKVD00AB" +"K*SP**","PO","SP","MLF","64311MLF E000AB","","SOZAI","","COWL,R MIDDLE COWL(SANDING)","1513","2026/02/23","15","64311MLFE00AB" +"K*SP**","PO","SP","MLF","64311MLF E000AB","","SOZAI","","COWL,R MIDDLE COWL(SANDING)","1513","2026/02/24","20","64311MLFE00AB" +"K*SP**","PO","SP","MKR","64312MKR D100AB","","SOZAI","","COWL,R MIDDLE(SANDING)","1513","2026/02/19","10","64312MKRD10AB" +"K*SP**","PO","SP","MKT","64313MKT D000AB","","SOZAI","D000AA 旧型","LID,POCKET(SANDING)","1513","2026/02/20","5","64313MKTD00AB" +"K*SP**","PO","SP","MKC","64315MKC A000AB","","SOZAI","","COWL R MIDDLE(SANDING)","1513","2026/02/02","15","64315MKCA00AB" +"K*SP**","PO","SP","MKH","64320MKH D000AB","","SOZAI","0","COWL,R SIDE(SANDING)","1513","2026/02/16","15","64320MKHD00AB" +"K*SP**","PO","SP","MGE","64321MGE 0000AB","","SOZAI","2次加工","COWL L MIDDLE(SANDING)","1513","2026/02/11","5","64321MGE000AB" +"K*SP**","PO","SP","MJM","64325MJM D000AB","","SOZAI","","COWL,L MIDDLE(SANDING)","1513","2026/02/04","5","64325MJMD00AB" +"K*SP**","PO","SP","MKC","64325MKC A000AB","","SOZAI","","COWL L,MIDDLE(SANDING)","1513","2026/02/03","15","64325MKCA00AB" +"K*SP**","PO","SP","MKW","64330MKW DB00","TYPE2","NHC99R","DB00","SET ILLUS,R MIDDLE COWL","1513","2026/02/23","5","64330MKWDB0ZA" +"K*SP**","PO","SP","MLB","64330MLB D000AB","","SOZAI","0","SHROUD R(SANDING)","1513","2026/02/12","30","64330MLBD00AB" +"K*SP**","PO","SP","MLB","64330MLB D000AB","","SOZAI","0","SHROUD R(SANDING)","1513","2026/02/13","30","64330MLBD00AB" +"K*SP**","PO","SP","MLB","64330MLB D000AB","","SOZAI","0","SHROUD R(SANDING)","1513","2026/02/16","15","64330MLBD00AB" +"K*SP**","PO","SP","MLRR","64330MLR Y800 01","","","","COVER ASSY,R TANK","1513","2026/02/10","5","64330MLRY80" +"K*SP**","PO","SP","MFT","64331MFT 6600AB","","SOZAI","教習車","PANEL R FLOOR SIDE(KAKOU)","1513","2026/02/23","5","64331MFT660AB" +"K*SP**","PO","SP","KVZ","64336KVZ K102","","","0","PANEL,FR METER","1513","2026/02/03","5","64336KVZK10" +"K*SP**","PO","SP","MKW","64340MKW DB00","TYPE2","NHC99R","DB00","SET ILLUS,L MIDDLE COWL","1513","2026/02/24","5","64340MKWDB0ZA" +"K*SP**","PO","SP","MLB","64340MLB D000AB","","SOZAI","","SHROUD L(SANDING)","1513","2026/02/19","30","64340MLBD00AB" +"K*SP**","PO","SP","MKW","64341MKW D000AB","","SOZAI","0","COWL A,L MIDDLE(SANDING)","1513","2026/02/03","5","64341MKWD00AB" +"K*SP**","PO","SP","MLC","64341MLC D000AB","","SOZAI","","COWL,R SIDE(SANDING)","1513","2026/02/06","10","64341MLCD00AB" +"K*SP**","PO","SP","MGH","64360MGH 6400AB","","SOZAI","0","COWL L MIDDLE(SANDING)","1513","2026/02/19","5","64360MGH640AB" +"K*SP**","PO","SP","MGP","64360MGP D000AB","","SOZAI","0","COWL L MIDDLE(SANDING)","1513","2026/02/18","5","64360MGPD00AB" +"K*SP**","PO","SP","MJC","64360MJC A001AB","","SOZAI","0","COWL,L MIDDLE(SANDING)","1513","2026/02/02","5","64360MJCA00AB" +"K*SP**","PO","SP","MLRR","64360MLR Y800 01","","","","COVER ASSY,L TANK","1513","2026/02/11","15","64360MLRY80" +"K*SP**","PO","SP","MJP","64361MJP G501AB01","","SOZAI","0","COWL,L MIDDLE(SANDING)","1513","2026/02/02","20","64361MJPG50AB" +"K*SP**","PO","SP","MKV","64361MKV D000AB","","SOZAI","0","COWL,L FRONT SIDE(SANDING)","1513","2026/02/24","30","64361MKVD00AB" +"K*SP**","PO","SP","MLF","64361MLF E000AB","","SOZAI","","COWL L MIDDLE(SANDING)","1513","2026/02/25","20","64361MLFE00AB" +"K*SP**","PO","SP","MLF","64361MLF E000AB","","SOZAI","","COWL L MIDDLE(SANDING)","1513","2026/02/26","20","64361MLFE00AB" +"K*SP**","PO","SP","MKH","64370MKH D000AB","","SOZAI","0","COWL,L SIDE(SANDING)","1513","2026/02/17","10","64370MKHD00AB" +"K*SP**","PO","SP","MKF","64406MKF D400AB","","SOZAI","0","COWL,R UNDER(SANDING)","1513","2026/02/04","5","64406MKFD40AB" +"K*SP**","PO","SP","MFJ","64410MFJ A400AB","","SOZAI","MFJH新型","COWL,R UNDER(SANDING)","1513","2026/02/04","10","64410MFJA40AB" +"K*SP**","PO","SP","MGP","64410MGP D000AB","","SOZAI","0","COWL R UNDER(SANDING)","1513","2026/02/17","5","64410MGPD00AB" +"K*SP**","PO","SP","MJC","64410MJC A000AB","","SOZAI","0","COWL,R UNDER(SANDING)","1513","2026/02/03","15","64410MJCA00AB" +"K*SP**","PO","SP","MJC","64410MJC A000AB","","SOZAI","0","COWL,R UNDER(SANDING)","1513","2026/02/04","20","64410MJCA00AB" +"K*SP**","PO","SP","MJC","64410MJC A000AB","","SOZAI","0","COWL,R UNDER(SANDING)","1513","2026/02/05","20","64410MJCA00AB" +"K*SP**","PO","SP","MJC","64410MJC A000AB","","SOZAI","0","COWL,R UNDER(SANDING)","1513","2026/02/06","20","64410MJCA00AB" +"K*SP**","PO","SP","MKA2","64410MJL D700AB","","SOZAI","MKA","SKIRT R FRONT FLOOR(SANDING)","1513","2026/02/09","5","64410MJLD70AB" +"K*SP**","PO","SP","MGH","64460MGH 6400AB","","SOZAI","0","COWL L UNDER(SANDING)","1513","2026/02/19","5","64460MGH640AB" +"K*SP**","PO","SP","MGP","64460MGP D000AB","","SOZAI","0","COWL,L UNDER(SANDING)","1513","2026/02/18","5","64460MGPD00AB" +"K*SP**","PO","SP","MJC","64460MJC A000AB","","SOZAI","","COWL,L UNDER(SANDING)","1513","2026/02/02","5","64460MJCA00AB" +"K*SP**","PO","SP","MKH","64460MKH D000AA","","SOZAI","0","COVER,L SKIRT(SOZAI)","1513","2026/02/17","10","64460MKHD00AA" +"K*SP**","PO","SP","MGE","64471MGE 0000AB","","SOZAI","0","COVER R FUEL TANK(SANDING)","1513","2026/02/11","5","64471MGE000AB" +"K*SP**","PO","SP","MKT","64471MKT D000AA","","SOZAI","D000AA","COVER,L SKIRT(SOZAI)","1513","2026/02/20","25","64471MKTD00AA" +"K*SP**","PO","SP","MCA","64501MCA A601","","","0","COWL,CTR INNER","1513","2026/02/06","15","64501MCAA60" +"K*SP**","PO","SP","MCA","64503MCA A601","","","0","COWL,L INNER","1513","2026/02/06","5","64503MCAA60" +"K*SP**","PO","SP","MCA","64503MCA S400","","","0","COWL,L INNER","1513","2026/02/20","5","64503MCAS40" +"K*SP**","PO","SP","V17","65141V17 0001","G193R","G193R","0","FENDER,R FRONT","1513","2026/02/09","10","65141V17000ZA" +"K*SP**","PO","SP","MFP","77210MFP N901XB","","SOZAI","0","COWL COMP,REAR","1513","2026/02/05","15","77210MFPN90XB" +"K*SP**","PO","SP","MGP","77211MGP D000AB","","SOZAI","0","SEAT COWL(SANDIG)","1513","2026/02/18","5","77211MGPD00AB" +"K*SP**","PO","SP","MKV","77221MKV D000AA","","SOZAI","","COWL,R REAR(SOZAI)","1513","2026/02/05","15","77221MKVD00AA" +"K*SP**","PO","SP","MKA2","77230MKA D700AA","","SOZAI","","COWL,L REAR(SOZAI)","1513","2026/02/09","5","77230MKAD70AA" +"K*SP**","PO","SP","MFM","77231MFM C000AB","","SOZAI","MFM新型","COWL RR CENTER(SANDING)","1513","2026/02/13","5","77231MFMC00AB" +"K*SP**","PO","SP","MKF","77231MKF D400AA","","SOZAI","0","COWL,REAR UNDER(SOZAI)","1513","2026/02/23","5","77231MKFD40AA" +"K*SP**","PO","SP","MFM","77241MFM C000AB","","SOZAI","MFM新型","COWL R RR(SANDING)","1513","2026/02/09","10","77241MFMC00AB" +"K*SP**","PO","SP","MKR","77241MKR D100AA","","SOZAI","","COWL,L REAR SIDE(SOZAI)","1513","2026/02/10","10","77241MKRD10AA" +"K*SP**","PO","SP","MFM","77251MFM C000AB","","SOZAI","MFM新型","COWL L RR(SANDING)","1513","2026/02/06","20","77251MFMC00AB" +"K*SP**","PO","SP","MKT","77261MKT D000AA","","SOZAI","D000AA","COWL,L REAR(SOZAI)","1513","2026/02/20","5","77261MKTD00AA" +"K*SP**","PO","SP","MKV","77271MKV D000AA","","SOZAI","","COWL,L REAR(SOZAI)","1513","2026/02/23","5","77271MKVD00AA" +"K*SP**","PO","SP","K88","80100K88 L201","PB186","PB186","0","FENDER,REAR","1513","2026/02/23","5","80100K88L20ZC" +"K*SP**","PO","SP","K88","80100K88 L201","R110","R110","0","FENDER,REAR","1513","2026/02/10","5","80100K88L20ZB" +"K*SP**","PO","SP","K88","80100K88 L201","T23","T23","0","FENDER,REAR","1513","2026/02/11","10","80100K88L20ZA" +"K*SP**","PO","SP","MJR","80100MJR 6700AB","","SOZAI","0","FENDER B RR(SANDING)","1513","2026/02/10","5","80100MJR670AB" +"K*SP**","PO","SP","MKE","80101K95 AJ00","R292R","R292R","0","SET ILLUS,RR FENDER","1513","2026/02/19","5","80101K95AJ0ZA" +"K*SP**","PO","SP","MCA","80107MCA S400AB","","SOZAI","0","COVER R SADDLEBAG REAR(SANDING)","1513","2026/02/26","5","80107MCAS40AB" +"K*SP**","PO","SP","HP1","80110HP1 60002001","NH196","NH196","0","REAR FENDER","1513","2026/02/23","10","80110HP1600ZD" +"K*SP**","PO","SP","HP1","80110HP1 60002001","NHA79MR","NHA79MR","0","REAR FENDER","1513","2026/02/19","10","80110HP1600ZA" +"K*SP**","PO","SP","HP1","80110HP1 60002001","NHA79MR","NHA79MR","0","REAR FENDER","1513","2026/02/20","5","80110HP1600ZA" +"K*SP**","PO","SP","MKC","80131MKC A000AB","","SOZAI","","COVERA,LSADDLEBAGRR(SANDING)","1513","2026/02/17","10","80131MKCA00AB" +"K*SP**","PO","SP","K88","80151K88 L201","T23","T23","スタンダード・ビジネス","COVER,CENTER","1513","2026/02/12","5","80151K88L20ZA" +"K*SP**","PO","SP","GJH","81100GJH J000","TYPE1","","0","SET ILLUS,RR DECK COVER","1513","2026/02/13","2","81100GJHJ00ZA" +"K*SP**","PO","SP","MKC","81112MKC A000AB","","SOZAI","","COVER R,TRUNK SIDE(SANDING)","1513","2026/02/20","5","81112MKCA00AB" +"K*SP**","PO","SP","MKC","81112MKC L000AB","","SOZAI","","COVER,R TRUNK SIDE(SANDING)","1513","2026/02/02","20","81112MKCL00AB" +"K*SP**","PO","SP","MKC","81114MKC A001","","","旧型","BOX ASSY,TRUNK INNER","1513","2026/02/17","15","81114MKCA00" +"K*SP**","PO","SP","MKC","81116MKC A000AB","","SOZAI","","COVER CENTER,TRUNKLWR(SANDING)","1513","2026/02/06","10","81116MKCA00AB" +"K*SP**","PO","SP","MKC","81116MKC L000AB","","SOZAI","","COVER CENTER,TRUNKLWR(SANDING)","1513","2026/02/02","5","81116MKCL00AB" +"K*SP**","PO","SP","MKC","81121MKC A000AB","","SOZAI","TL_OLD","LID,TRUNK(SANDING)","1513","2026/02/13","5","81121MKCA00AB" +"K*SP**","PO","SP","K88","81131K88 L210","NH388R","NH388R","スタンダード・ビジネス","SHIELD,LEG(NEW)","1513","2026/02/18","50","81131K88L21ZA" +"K*SP**","PO","SP","K88","81135K88 Y100","YR176","YR176","ビジネス","COVER,COMB AND LOCK","1513","2026/02/12","10","81135K88Y10ZB" +"K*SP**","PO","SP","MCA","81143MCA S400AB","","SOZAI","0","COVER R LWR TRUNK(SANDING)","1513","2026/02/26","10","81143MCAS40AB" +"K*SP**","PO","SP","MCA","81148MCA S400AB","","SOZAI","0","COVER L LWR TRUNK(SANDING)","1513","2026/02/25","25","81148MCAS40AB" +"K*SP**","PO","SP","MKC","81212MKC A000AB","","SOZAI","","COVER,L TRUNK SIDE(SANDING)","1513","2026/02/13","5","81212MKCA00AB" +"K*SP**","PO","SP","MKC","81212MKC L000AB","","SOZAI","","COVER,L TRUNK SIDE(SANDING)","1513","2026/02/03","20","81212MKCL00AB" +"K*SP**","PO","SP","MCA","81221MCA S400AB","","SOZAI","0","LID,R SADDLEBAG(SANDING)","1513","2026/02/25","10","81221MCAS40AB" +"K*SP**","PO","SP","MCA","81231MCA S400","","","0","PANEL,R SADDLEBAG","1513","2026/02/25","5","81231MCAS40" +"K*SP**","PO","SP","MCA","81241MCA S400","","","0","INNER LID,R SADDLEBAG","1513","2026/02/26","5","81241MCAS40" +"K*SP**","PO","SP","MKC","81311MKC A001","","","0","BODY,R SADDLEBAG","1513","2026/02/02","15","81311MKCA00" +"K*SP**","PO","SP","MKC","81311MKC A101","","","AUDIO","BODY,R SADDLEBAG","1513","2026/02/06","5","81311MKCA10" +"K*SP**","PO","SP","MKC","81321MKC A000AB","","SOZAI","","LID,R SADDLEBAG(SANDING)","1513","2026/02/06","20","81321MKCA00AB" +"K*SP**","PO","SP","MKC","81331MKC A000","","","0","PANEL,R SADDLEBAG","1513","2026/02/09","15","81331MKCA00" +"K*SP**","PO","SP","MKC","81331MKC A000","","","0","PANEL,R SADDLEBAG","1513","2026/02/10","5","81331MKCA00" +"K*SP**","PO","SP","MKC","81341MKC A001","","","0","INNER LID,R SADDLEBAG","1513","2026/02/12","10","81341MKCA00" +"K*SP**","PO","SP","MJN","81360MJN A002","","NH1","0","LID,L SADDLEBAG","1513","2026/02/11","10","81360MJNA00" +"K*SP**","PO","SP","MKC","81411MKC A001","","","0","BODY,L SADDLEBAG","1513","2026/02/04","15","81411MKCA00" +"K*SP**","PO","SP","MKC","81411MKC A001","","","0","BODY,L SADDLEBAG","1513","2026/02/05","15","81411MKCA00" +"K*SP**","PO","SP","MKC","81411MKC A101","","","0","BODY,L SADDLEBAG","1513","2026/02/09","10","81411MKCA10" +"K*SP**","PO","SP","MCA","81421MCA S400AB","","SOZAI","0","LID,L SADDLEBAG(SANDING)","1513","2026/02/26","10","81421MCAS40AB" +"K*SP**","PO","SP","MKC","81421MKC A000AB","","SOZAI","0","LID,L SADDLEBAG(SANDING)","1513","2026/02/05","15","81421MKCA00AB" +"K*SP**","PO","SP","MKC","81431MKC A001","","","0","PANEL,L SADDLEBAG","1513","2026/02/11","15","81431MKCA00" +"K*SP**","PO","SP","MKC","81431MKC A001","","","0","PANEL,L SADDLEBAG","1513","2026/02/12","10","81431MKCA00" +"K*SP**","PO","SP","MKC","81441MKC A001","","","0","INNER LID,L SADDLEBAG","1513","2026/02/10","15","81441MKCA00" +"K*SP**","PO","SP","MCA","81501MCA S400AB","","SOZAI","0","COWL CTR RR SADDLEBAG(SANDING)","1513","2026/02/26","5","81501MCAS40AB" +"K*SP**","PO","SP","MKC","81550MKC A100AB","","SOZAI","","COVER,CTR RR TOP(SANDING)","1513","2026/02/13","5","81550MKCA10AB" +"K*SP**","PO","SP","MKC","81551MKC A100AA","","SOZAI","","LID R,RR TOP(SOZAI)","1513","2026/02/12","10","81551MKCA10AA" +"K*SP**","PO","SP","MKC","81556MKC A100AA","","SOZAI","","LID L,RR TOP(SOZAI)","1513","2026/02/16","5","81556MKCA10AA" +"K*SP**","PO","SP","MCA","82513MCA S400","","NH1","0","COVER,L SADDLEBAG LID","1513","2026/02/20","5","82513MCAS40" +"K*SP**","PO","SP","MKR","83152MKR D100AB","","SOZAI","","SHELTER,FR(SANDING)","1513","2026/02/10","5","83152MKRD10AB" +"K*SP**","PO","SP","MKR","83162MKR D100AA","","SOZAI","","COVER,R SIDE(SOZAI)","1513","2026/02/10","5","83162MKRD10AA" +"K*SP**","PO","SP","MKR","83172MKR D100AA","","SOZAI","","COVER,L SIDE(SOZAI)","1513","2026/02/11","5","83172MKRD10AA" +"K*SP**","PO","SP","K88","83404K88 L001","NH388R","NH388R","0","LID,R BODY COVER","1513","2026/02/18","5","83404K88L00ZA" +"K*SP**","PO","SP","K88","83404K88 L201","NH1","NH1","0","LID,R BODY COVER","1513","2026/02/19","10","83404K88L20ZD" +"K*SP**","PO","SP","K88","83410K88 B000","TYPE2","NH1","0","SET ILLUS,R BODY COVER LID","1513","2026/02/04","5","83410K88B00ZB" +"K*SP**","PO","SP","K88","83410K88 B000","TYPE3","NH1","0","SET ILLUS,R BODY COVER LID","1513","2026/02/09","10","83410K88B00ZA" +"K*SP**","PO","SP","K88","83504K88 L001","NH388R","NH388R","0","LID,L BODY COVER","1513","2026/02/12","25","83504K88L00ZA" +"K*SP**","PO","SP","K88","83504K88 L201","NH1","NH1","0","LID,L BODY COVER","1513","2026/02/02","15","83504K88L20ZD" +"K*SP**","PO","SP","K88","83504K88 L201","R110","R110","0","LID,L BODY COVER","1513","2026/02/16","20","83504K88L20ZB" +"K*SP**","PO","SP","K88","83504K88 L201","R110","R110","0","LID,L BODY COVER","1513","2026/02/17","20","83504K88L20ZB" +"K*SP**","PO","SP","K88","83510GGN B000 01","TYPE1","NH1","0","SET ILLUS,L BODY COVER LID","1513","2026/02/05","5","83510GGNB00ZA" +"K*SP**","PO","SP","GGZ","83510GGZ J000AA","","SOZAI","0","COVER,R BODY(SOZAI)","1513","2026/02/11","5","83510GGZJ00AA" +"K*SP**","PO","SP","GJA","83510GJA J000AA","","SOZAI","0","COVER,R BODY(SOZAI)","1513","2026/02/11","50","83510GJAJ00AA" +"K*SP**","PO","SP","GJA","83510GJA J000AA","","SOZAI","0","COVER,R BODY(SOZAI)","1513","2026/02/12","15","83510GJAJ00AA" +"K*SP**","PO","SP","GJB","83510GJB J000AA","","SOZAI","0","COVER,R BODY(SOZAI)","1513","2026/02/19","5","83510GJBJ00AA" +"K*SP**","PO","SP","GJB","83510GJB J000AA","","SOZAI","0","COVER,R BODY(SOZAI)","1513","2026/02/20","50","83510GJBJ00AA" +"K*SP**","PO","SP","GJB","83510GJB J000AA","","SOZAI","0","COVER,R BODY(SOZAI)","1513","2026/02/23","50","83510GJBJ00AA" +"K*SP**","PO","SP","K88","83510K88 B000","TYPE3","NH1","0","SET ILLUS,L BODY COVER LID","1513","2026/02/10","5","83510K88B00ZA" +"K*SP**","PO","SP","MLC","83510MLC D000AB","","SOZAI","","COVER,A R SIDE(SANDING)","1513","2026/02/06","5","83510MLCD00AB" +"K*SP**","PO","SP","GJB","83520GJB J000AA","","SOZAI","0","COVER,R SIDE(SOZAI)","1513","2026/02/10","50","83520GJBJ00AA" +"K*SP**","PO","SP","GJB","83520GJB J000AA","","SOZAI","0","COVER,R SIDE(SOZAI)","1513","2026/02/11","50","83520GJBJ00AA" +"K*SP**","PO","SP","GJB","83520GJB J000AA","","SOZAI","0","COVER,R SIDE(SOZAI)","1513","2026/02/12","50","83520GJBJ00AA" +"K*SP**","PO","SP","GJB","83520GJB J000AA","","SOZAI","0","COVER,R SIDE(SOZAI)","1513","2026/02/13","50","83520GJBJ00AA" +"K*SP**","PO","SP","GJB","83520GJB J000AA","","SOZAI","0","COVER,R SIDE(SOZAI)","1513","2026/02/16","50","83520GJBJ00AA" +"K*SP**","PO","SP","GJB","83520GJB J000AA","","SOZAI","0","COVER,R SIDE(SOZAI)","1513","2026/02/17","50","83520GJBJ00AA" +"K*SP**","PO","SP","GJB","83520GJB J000AA","","SOZAI","0","COVER,R SIDE(SOZAI)","1513","2026/02/18","40","83520GJBJ00AA" +"K*SP**","PO","SP","GGZ","83521GGZ J001AA","","SOZAI","0","COVER,R SIDE(SOZAI)","1513","2026/02/11","5","83521GGZJ00AA" +"K*SP**","PO","SP","MKW","83521MKW D000AB","","SOZAI","","SHELTER,R SIDE(SANDING)","1513","2026/02/04","5","83521MKWD00AB" +"K*SP**","PO","SP","MFM","83600MFM C000AB","","SOZAI","0","COVER R SIDE(SANDING)","1513","2026/02/13","5","83600MFMC00AB" +"K*SP**","PO","SP","K88","83601K88 L210","T23","T23","0","COVER,R BODY","1513","2026/02/16","10","83601K88L21ZA" +"K*SP**","PO","SP","GJA","83610GJA J000AA","","SOZAI","0","COVER L BODY(SOZAI)","1513","2026/02/13","50","83610GJAJ00AA" +"K*SP**","PO","SP","GJA","83610GJA J000AA","","SOZAI","0","COVER L BODY(SOZAI)","1513","2026/02/16","10","83610GJAJ00AA" +"K*SP**","PO","SP","GJB","83610GJB J000AA","","SOZAI","0","COVER L BODY(SOZAI)","1513","2026/02/24","10","83610GJBJ00AA" +"K*SP**","PO","SP","GJB","83610GJB J000AA","","SOZAI","0","COVER L BODY(SOZAI)","1513","2026/02/25","50","83610GJBJ00AA" +"K*SP**","PO","SP","GJB","83610GJB J000AA","","SOZAI","0","COVER L BODY(SOZAI)","1513","2026/02/26","50","83610GJBJ00AA" +"K*SP**","PO","SP","MJP","83611MJP G501AA","","SOZAI","0","COVER,R SIDE(SOZAI)","1513","2026/02/03","15","83611MJPG50AA" +"K*SP**","PO","SP","MKC","83611MKC A000AB","","SOZAI","","COVER A,R SIDE(SANDING)","1513","2026/02/03","5","83611MKCA00AB" +"K*SP**","PO","SP","GJB","83620GJB J000AA","","SOZAI","0","COVER,L SIDE(SOZAI)","1513","2026/02/18","19","83620GJBJ00AA" +"K*SP**","PO","SP","GJB","83620GJB J000AA","","SOZAI","0","COVER,L SIDE(SOZAI)","1513","2026/02/19","50","83620GJBJ00AA" +"K*SP**","PO","SP","GJB","83620GJB J000AA","","SOZAI","0","COVER,L SIDE(SOZAI)","1513","2026/02/20","50","83620GJBJ00AA" +"K*SP**","PO","SP","GJB","83620GJB J000AA","","SOZAI","0","COVER,L SIDE(SOZAI)","1513","2026/02/23","50","83620GJBJ00AA" +"K*SP**","PO","SP","GJB","83620GJB J000AA","","SOZAI","0","COVER,L SIDE(SOZAI)","1513","2026/02/24","50","83620GJBJ00AA" +"K*SP**","PO","SP","GJB","83620GJB J000AA","","SOZAI","0","COVER,L SIDE(SOZAI)","1513","2026/02/25","50","83620GJBJ00AA" +"K*SP**","PO","SP","GJB","83620GJB J000AA","","SOZAI","0","COVER,L SIDE(SOZAI)","1513","2026/02/26","50","83620GJBJ00AA" +"K*SP**","PO","SP","GGZ","83621GGZ J001AA","","SOZAI","0","COVER,L SIDE(SOZAI)","1513","2026/02/11","5","83621GGZJ00AA" +"K*SP**","PO","SP","MFT","83661MFT 6400AA","","SOZAI","0","COVER L RR BODY LOWER(SOZAI)","1513","2026/02/23","5","83661MFT640AA" +"K*SP**","PO","SP","MJP","83711MJP G501AA","","SOZAI","0","COVER,L SIDE(SOZAI)","1513","2026/02/04","10","83711MJPG50AA" +"K*SP**","PO","SP","MKC","83711MKC A000AB","","SOZAI","","COVER A,L SIDE(SANDING)","1513","2026/02/05","5","83711MKCA00AB" +"K*SP**","PO","SP","MKS2","83711MKS E201AA","","SOZAI","","COWL L,RR SIDE(SOZAI)","1513","2026/02/18","5","83711MKSE20AA" +"K*SP**","PO","SP","MLF","83711MLF E000AB","","SOZAI","","COWL A,L RR SIDE(SANDING)","1513","2026/02/24","5","83711MLFE00AB" +"K*SP**","PO","SP","GJB","83712GJB J000AA","","SOZAI","0","COVER,RR CENTER(SOZAI)","1513","2026/02/24","10","83712GJBJ00AA" +"K*SP**","PO","SP","MKN","17570MKY D600 03","NHA86M","NHA86M","0","COVER ASSY,FUEL TANK FR","1513","2026/02/03","5","17570MKYD60ZG" +"K*SP**","PO","SP","K88","53206K88 J001","NH388","NH388","スタンダード","COVER,HANDLE LOW","1513","2026/02/20","5","53206K88J00ZD" +"K*SP**","PO","SP","K88","53206K88 J001","PB394M","PB394M","スタンダード","COVER,HANDLE LOW","1513","2026/02/06","5","53206K88J00ZC" +"K*SP**","PO","SP","K88","53206K88 J001","YR176","YR176","スタンダード","COVER,HANDLE LOW","1513","2026/02/25","5","53206K88J00ZH" +"K*SP**","PO","SP","K64","61000K64 JH00 03","TYPE3","R380","23YM","SET ILLUS,FR FENDER","1513","2026/02/25","5","61000K64JH0ZA" +"K*SP**","PO","SP","K88","61100K88 J001","B197M","B197M","スタンダード","FENDER,FRONT","1513","2026/02/03","15","61100K88J00ZG" +"K*SP**","PO","SP","K88","61100K88 J001","G142M","G142M","スタンダード","FENDER,FRONT","1513","2026/02/02","15","61100K88J00ZF" +"K*SP**","PO","SP","K88","61100K88 J001","NH388","NH388","スタンダード","FENDER,FRONT","1513","2026/02/20","10","61100K88J00ZD" +"K*SP**","PO","SP","K88","61100K88 J001","PB394M","PB394M","スタンダード","FENDER,FRONT","1513","2026/02/06","15","61100K88J00ZC" +"K*SP**","PO","SP","K88","61100K88 J001","R201","R201","スタンダード","FENDER,FRONT","1513","2026/02/13","5","61100K88J00ZJ" +"K*SP**","PO","SP","K88","61100K88 J001","YR211","YR211","スタンダード","FENDER,FRONT","1513","2026/02/18","5","61100K88J00ZB" +"K*SP**","PO","SP","MFJ","61100MFJ D001 06","NHA86M","NHA86M","0","FENDER,FR COMP","1513","2026/02/02","10","61100MFJD00ZV" +"K*SP**","PO","SP","MKN","61101MKN D500 06","NHD19M","NHD19M","0","FENDER,COMP FRONT","1513","2026/02/13","20","61101MKND50ZW" +"K*SP**","PO","SP","MKN","61110MKY J500 03","TYPE1","R381C","0","SET ILLUS,FR FENDER","1513","2026/02/25","5","61110MKYJ50ZC" +"K*SP**","PO","SP","MLRX","61110MLR J800 03","TYPE1","NHA86M","DQ00AA","FENDER,COMP FRONT","1513","2026/02/25","10","61110MLRJ80ZA" +"K*SP**","PO","SP","MJC","64100MJC LS00","NHC47P","NHC47P","0","SET ILLUS,UPPER COWL","1513","2026/02/05","5","64100MJCLS0ZA" +"K*SP**","PO","SP","MKZ","64100MKZ J300","TYPE1","R380","0","SET ILLUST,UPPER COWL","1513","2026/02/10","15","64100MKZJ30ZA" +"K*SP**","PO","SP","MKZ","64100MKZ J300","TYPE1","R380","0","SET ILLUST,UPPER COWL","1513","2026/02/11","15","64100MKZJ30ZA" +"K*SP**","PO","SP","MKZ","64100MKZ J400","TYPE1","NHA86M","0","SET ILLUST,UPPER COWL","1513","2026/02/19","20","64100MKZJ40ZA" +"K*SP**","PO","SP","MKC","64100MLJ M200","TYPE1","R337M","8A+7B","SET ILLUS,GARNISH SCREEN A","1513","2026/02/17","5","64100MLJM20ZA" +"K*SP**","PO","SP","MKC","64100MLJ M700","TYPE1","YR387M/NHC07M","8A+7A+7B","SET ILLUS,GARNISH SCREEN A","1513","2026/02/25","5","64100MLJM70ZA" +"K*SP**","PO","SP","MKC","64105MKC A000 02","TYPE1","NHB73M","8A","GARNISH B ASSY,SCREEN","1513","2026/02/02","15","64105MKCA00ZB" +"K*SP**","PO","SP","MKC","64105MKC A100 02","TYPE1","NHB01","7B+8A","GARNISH B ASSY,SCREEN","1513","2026/02/05","10","64105MKCA10ZA" +"K*SP**","PO","SP","MKC","64110MKC A000","NHA86M","NHA86M","OCなし","GARNISH A,SCREEN","1513","2026/02/02","5","64110MKCA00ZH" +"K*SP**","PO","SP","MKV","64111MKV D500 01","YR386M","YR386M","D500AA","COWL,FRONT","1513","2026/02/18","10","64111MKVD50ZA" +"K*SP**","PO","SP","MKT","64140MKT D000 03","NHA86M","NHA86M","D000AA","COVER ASSY,INNER","1513","2026/02/09","5","64140MKTD00ZG" +"K*SP**","PO","SP","MKT","64140MKT D000 03","NHB01","NHB01","D000AA","COVER ASSY,INNER","1513","2026/02/09","35","64140MKTD00ZD" +"K*SP**","PO","SP","MKT","64140MKT D000 03","R380","R380","D000AA","COVER ASSY,INNER","1513","2026/02/23","10","64140MKTD00ZA" +"K*SP**","PO","SP","MKW","64151MKW D000","NHC08M","NHC08M","0","PANEL,R AIR","1513","2026/02/24","25","64151MKWD00ZA" +"K*SP**","PO","SP","MKW","64151MKW D700","NHB01","NHB01","D700AA","PANEL,R AIR","1513","2026/02/13","10","64151MKWD70ZB" +"K*SP**","PO","SP","MKW","64161MKW D000","NHC08M","NHC08M","0","PANEL,L AIR","1513","2026/02/25","10","64161MKWD00ZA" +"K*SP**","PO","SP","MKW","64161MKW D700","NHB01","NHB01","D700AA","PANEL,L AIR","1513","2026/02/12","10","64161MKWD70ZB" +"K*SP**","PO","SP","MKW","64161MKW D700","NHC08M","NHC08M","D700AA","PANEL,L AIR","1513","2026/02/23","15","64161MKWD70ZA" +"K*SP**","PO","SP","MKYJ","64210MKY JF00","R380","R380","MKY E000AA","SET ILLUS,R MID COWL A","1513","2026/02/23","1","64210MKYJF0ZA" +"K*SP**","PO","SP","MLN1","64210MLN E000","NHA86M","NHA86M","1型","COWL,FR CENTER","1513","2026/02/23","20","64210MLNE00ZC" +"K*SP**","PO","SP","MLT","64211MLT D000","NHB01","NHB01","","COWL,FR UPPER","1513","2026/02/18","5","64211MLTD00ZC" +"K*SP**","PO","SP","MLT","64211MLT D000","R380","R380","","COWL,FR UPPER","1513","2026/02/17","5","64211MLTD00ZA" +"K*SP**","PO","SP","MLL","64212MLL D001","NHA86M","NHA86M","","COWL,R UPPER H/L","1513","2026/02/02","10","64212MLLD00ZE" +"K*SP**","PO","SP","MLL","64212MLL D001","R380","R380","","COWL,R UPPER H/L","1513","2026/02/16","10","64212MLLD00ZA" +"K*SP**","PO","SP","MFP","64220MFP JV00 01","TYPE1 1","NHA66P/R381C","8A+7A+8B+7B","SET ILLUS,R SIDE COWL","1513","2026/02/03","5","64220MFPJV0ZB" +"K*SP**","PO","SP","MFP","64220MFP SB00 01","TYPE1 1","PB409P/NHB53P","ミラー2TN035 8A+7A+7B","SET ILLUS,R SIDE COWL","1513","2026/02/10","5","64220MFPSB0ZB" +"K*SP**","PO","SP","MLRX","64220MLR J900","NHB53P","NHB53P","D800AA","COWL ASSY,R MIDDLE","1513","2026/02/13","4","64220MLRJ90ZA" +"K*SP**","PO","SP","MKT","64222MKT D700","NHD05","NHD05","D700AA","COWL,NOSE","1513","2026/02/25","10","64222MKTD70ZC" +"K*SP**","PO","SP","MKT","64222MKT D700","PB409P","PB409P","D700AA","COWL,NOSE","1513","2026/02/10","5","64222MKTD70ZD" +"K*SP**","PO","SP","MFP","64230MFP SB00 01","TYPE1 1","PB409P/NHB53P","ミラー2TN035 8A+7A+7B","SET ILLUS,L SIDE COWL","1513","2026/02/11","5","64230MFPSB0ZB" +"K*SP**","PO","SP","MLRX","64240MLR J900","NHB53P","NHB53P","D800AA","COWL ASSY,L MIDDLE","1513","2026/02/16","30","64240MLRJ90ZA" +"K*SP**","PO","SP","MLRX","64240MLR Y800","R134","R134","D800AA","COWL ASSY,L MIDDLE","1513","2026/02/23","5","64240MLRY80ZA" +"K*SP**","PO","SP","MLF","64241MLF E800","YR386M","YR386M","一発クリア","COWL,FR CENTER","1513","2026/02/17","5","64241MLFE80ZA" +"K*SP**","PO","SP","MLRR","64251MLR D000","NHA86M","NHA86M","D000AA","COWL,R MIDDLE","1513","2026/02/25","5","64251MLRD00ZC" +"K*SP**","PO","SP","MKS2","64252MKS E200 04","TYPE1","NHA86M","2型 8A","COVER ASSY,FRONT LOWER","1513","2026/02/06","10","64252MKSE20ZB" +"K*SP**","PO","SP","MKS2","64252MKS E200 04","TYPE2","NHB53P","2型 7B+8A","COVER ASSY,FRONT LOWER","1513","2026/02/20","15","64252MKSE20ZA" +"K*SP**","PO","SP","MKS1","64255MKS E000","TYPE1","NHA86M","1型 7B","SET ILLUS,FR CENTER COWL","1513","2026/02/05","10","64255MKSE00ZA" +"K*SP**","PO","SP","MKS2","64255MKS E200 01","TYPE2","B197M","2型 7B","SET ILLUS,FR CENTER COWL","1513","2026/02/03","15","64255MKSE20ZA" +"K*SP**","PO","SP","MKS1","64255MLG E500","TYPE1","B197M","1型 7B","SET ILLUS,FR CENTER COWL","1513","2026/02/04","5","64255MLGE50ZA" +"K*SP**","PO","SP","MLN1","64255MLN E200","TYPE1","NHB01","1型 8A+7B","SET ILLUS,FR CENTER COWL","1513","2026/02/18","15","64255MLNE20ZC" +"K*SP**","PO","SP","MLN4","64255MLN ER00","NHB01","NHB01","MKS2型 8A","SET ILLUS,FR CENTER COWL","1513","2026/02/16","10","64255MLNER0ZA" +"K*SP**","PO","SP","MLN4","64255MLN ES00 01","TYPE1","NHB53P","MKS2型 7B","SET ILLUS,FR CENTER COWL","1513","2026/02/19","10","64255MLNES0ZA" +"K*SP**","PO","SP","MKS1","64260MKS E000 01","TYPE1","NHA86M","1型 7B","SET ILLUS,R FR SIDE COWL","1513","2026/02/05","10","64260MKSE00ZB" +"K*SP**","PO","SP","MKS1","64260MKS E000 01","TYPE2","R380","1型 7B","SET ILLUS,R FR SIDE COWL","1513","2026/02/23","10","64260MKSE00ZA" +"K*SP**","PO","SP","MKS1","64265MKS E000 01","TYPE1","NHA86M","1型 7B","SET ILLUS,L FR SIDE COWL","1513","2026/02/06","5","64265MKSE00ZB" +"K*SP**","PO","SP","MKS1","64265MKS E000 01","TYPE2","R380","1型 7B","SET ILLUS,L FR SIDE COWL","1513","2026/02/24","20","64265MKSE00ZA" +"K*SP**","PO","SP","MKS1","64265MLG E400","NHB53P","NHB53P","1型 8A+7B","SET ILLUS,L FR SIDE COWL","1513","2026/02/16","10","64265MLGE40ZD" +"K*SP**","PO","SP","MLRR","64280MLR J200","R380","R380","D000AA","SET ILLUS,R WINGLET COWL","1513","2026/02/16","5","64280MLRJ20ZA" +"K*SP**","PO","SP","K64","64300K64 JH01","TYPE2","NHB53P","23YM","SET ILLUS,R MIDDLE COWL","1513","2026/02/26","10","64300K64JH0ZA" +"K*SP**","PO","SP","MJC","64300MJC LS00 01","NHC47P","NHC47P","0","SET ILLUS,R MIDDLE COWL","1513","2026/02/05","10","64300MJCLS0ZA" +"K*SP**","PO","SP","MKT","64300MKT D700","NHB53P","NHB53P","D700AA","COWL ASSY,R RR SIDE","1513","2026/02/17","5","64300MKTD70ZA" +"K*SP**","PO","SP","MKT","64300MKT D700","NHD05","NHD05","D700AA","COWL ASSY,R RR SIDE","1513","2026/02/25","5","64300MKTD70ZC" +"K*SP**","PO","SP","MLB","64300MLB D200","TYPE1","NHB54P","0","SET ILLUS,R SHROUD A","1513","2026/02/02","5","64300MLBD20ZD" +"K*SP**","PO","SP","MLB","64300MLB D200","TYPE2","B197M","0","SET ILLUS,R SHROUD A","1513","2026/02/04","5","64300MLBD20ZC" +"K*SP**","PO","SP","MLB","64300MLB D200","TYPE4","NHA86M","0","SET ILLUS,R SHROUD A","1513","2026/02/25","15","64300MLBD20ZA" +"K*SP**","PO","SP","MLB","64300MLB G400","TYPE1","NHB54P","0","SET ILLUS,R SHROUD A","1513","2026/02/04","5","64300MLBG40ZC" +"K*SP**","PO","SP","MKC","64300MLJ M500 01","NHA86M","NHA86M","8A+8B","COWL ASSY,R MIDDLE","1513","2026/02/03","5","64300MLJM50ZA" +"K*SP**","PO","SP","MLRR","64300MLR J200","R380","R380","D000AA","SET ILLUS,R MIDDLE COWL","1513","2026/02/16","5","64300MLRJ20ZA" +"K*SP**","PO","SP","MKC","64305MLJ AY00","TYPE1","NH389M","8A+8B","COWL ASSY,L MIDDLE","1513","2026/02/27","5","64305MLJAY0ZA" +"K*SP**","PO","SP","MKA2","64310MJL D701","NH436M","NH436M","新型","COWL,R FRONT SIDE","1513","2026/02/26","5","64310MJLD70ZF" +"K*SP**","PO","SP","MKT","64310MKT D600","TYPE2","R380","D000AA 旧型","SET ILLUS,R SIDE COWL","1513","2026/02/23","5","64310MKTD60ZA" +"K*SP**","PO","SP","MKT","64310MKT D800","Y242","Y242","D700AA","SET ILLUS,R SIDE COWL","1513","2026/02/06","10","64310MKTD80ZA" +"K*SP**","PO","SP","MLF","64310MLF E800","NHC52MC","NHC52MC","8A E800AA","SET ILLUS,R MIDDLE COWL","1513","2026/02/16","5","64310MLFE80ZC" +"K*SP**","PO","SP","MLF","64310MLF E800","PB409PC","PB409PC","8A E800AA","SET ILLUS,R MIDDLE COWL","1513","2026/02/27","5","64310MLFE80ZB" +"K*SP**","PO","SP","MKS1","64310MLG E500","TYPE1","NHB53P","1型 8A+7B","SET ILLUS,R MIDDLE COWL","1513","2026/02/13","5","64310MLGE50ZA" +"K*SP**","PO","SP","MLL","64310MLL D000","NHB01","NHB01","8A","SET ILLUS,R SHROUD A","1513","2026/02/16","5","64310MLLD00ZA" +"K*SP**","PO","SP","MLL","64310MLL W100","NHB01","NHB01","8A","SET ILLUS,R SHROUD A","1513","2026/02/18","13","64310MLLW10ZA" +"K*SP**","PO","SP","MLN1","64310MLN E100","NHA86M","NHA86M","1型 8A","SET ILLUS,R MIDDLE COWL","1513","2026/02/23","5","64310MLNE10ZA" +"K*SP**","PO","SP","MLN1","64310MLN E200","R380","R380","1型 8A+7B","SET ILLUS,R MIDDLE COWL","1513","2026/02/16","10","64310MLNE20ZA" +"K*SP**","PO","SP","MLN1","64310MLN E500 01","NHB53P","NHB53P","1型 8A+7B","SET ILLUS,R MIDDLE COWL","1513","2026/02/20","15","64310MLNE50ZA" +"K*SP**","PO","SP","MKT","64311MKT D000","NHA86M","NHA86M","D000AA 旧型","COWL,R SIDE","1513","2026/02/09","15","64311MKTD00ZG" +"K*SP**","PO","SP","MKT","64311MKT D000","NHC64M","NHC64M","D000AA 旧型","COWL,R SIDE","1513","2026/02/04","5","64311MKTD00ZF" +"K*SP**","PO","SP","MKT","64311MKT D700","NHB01","NHB01","D700AA","COWL,R SIDE","1513","2026/02/09","20","64311MKTD70ZB" +"K*SP**","PO","SP","MKT","64311MKT D700","NHB53P","NHB53P","D700AA","COWL,R SIDE","1513","2026/02/17","10","64311MKTD70ZA" +"K*SP**","PO","SP","MKV","64311MKV D500 01","NHC65M","NHC65M","D500AA","COWL,R FRONT SIDE A","1513","2026/02/12","5","64311MKVD50ZB" +"K*SP**","PO","SP","MKT","64315MKT D700","NHB53P","NHB53P","D700AA","LID COMP,POCKET","1513","2026/02/18","5","64315MKTD70ZA" +"K*SP**","PO","SP","MKT","64315MKT DB00","NHB54P","NHB54P","D700AA ストライプ有り","LID COMP,POCKET","1513","2026/02/05","10","64315MKTDB0ZA" +"K*SP**","PO","SP","MKZ","64315MKZ J300 02","R380","R380","0","COWL ASSY,R MIDDLE","1513","2026/02/10","15","64315MKZJ30ZA" +"K*SP**","PO","SP","MKZ","64315MKZ J300 02","R380","R380","0","COWL ASSY,R MIDDLE","1513","2026/02/11","10","64315MKZJ30ZA" +"K*SP**","PO","SP","MKZ","64315MKZ J400 02","NHA86M","NHA86M","0","COWL ASSY,R MIDDLE","1513","2026/02/20","15","64315MKZJ40ZA" +"K*SP**","PO","SP","MKZ","64315MKZ J400 02","NHA86M","NHA86M","0","COWL ASSY,R MIDDLE","1513","2026/02/23","15","64315MKZJ40ZA" +"K*SP**","PO","SP","MKZ","64320MKZ J300","PB440M","PB440M","0","SET ILLUS,R WINGLET","1513","2026/02/18","30","64320MKZJ30ZA" +"K*SP**","PO","SP","MKZ","64320MKZ J400","NHA86M","NHA86M","0","SET ILLUS,R WINGLET","1513","2026/02/20","15","64320MKZJ40ZA" +"K*SP**","PO","SP","MKZ","64320MKZ J400","NHA86M","NHA86M","0","SET ILLUS,R WINGLET","1513","2026/02/23","20","64320MKZJ40ZA" +"K*SP**","PO","SP","MLRX","64320MLR Y800","TYPE1","NHA86M","D800AA","SET ILLUS,R FR SIDE COWL","1513","2026/02/25","10","64320MLRY80ZA" +"K*SP**","PO","SP","MLM","64321MLM E000","NH389M","NH389M","0","COVER,R UNDER","1513","2026/02/24","15","64321MLME00ZA" +"K*SP**","PO","SP","MLM","64321MLM E000","NH389M","NH389M","0","COVER,R UNDER","1513","2026/02/25","20","64321MLME00ZA" +"K*SP**","PO","SP","MLM","64321MLM E000","NHD28M","NHD28M","0","COVER,R UNDER","1513","2026/02/02","15","64321MLME00ZB" +"K*SP**","PO","SP","MLM","64321MLM E000","NHD28M","NHD28M","0","COVER,R UNDER","1513","2026/02/03","20","64321MLME00ZB" +"K*SP**","PO","SP","MKW","64330MKW D000","TYPE3","R380","0","SET ILLUS,R MIDDLE COWL A","1513","2026/02/23","10","64330MKWD00ZB" +"K*SP**","PO","SP","MKW","64330MKW D700","TYPE3","NHD05","D700AA","SET ILLUS,R MIDDLE COWL","1513","2026/02/25","5","64330MKWD70ZA" +"K*SP**","PO","SP","MLM","64331MLM E000","NH389M","NH389M","0","COVER,L UNDER","1513","2026/02/26","20","64331MLME00ZA" +"K*SP**","PO","SP","MLM","64331MLM E000","NH389M","NH389M","0","COVER,L UNDER","1513","2026/02/27","20","64331MLME00ZA" +"K*SP**","PO","SP","MLM","64331MLM E000","NHD28M","NHD28M","0","COVER,L UNDER","1513","2026/02/04","20","64331MLME00ZB" +"K*SP**","PO","SP","MLM","64331MLM E000","NHD28M","NHD28M","0","COVER,L UNDER","1513","2026/02/05","20","64331MLME00ZB" +"K*SP**","PO","SP","MLT","64335MLT D000","TYPE2","NHC47P","8A+8B","COVER ASSY,R FUEL TANK","1513","2026/02/09","5","64335MLTD00ZA" +"K*SP**","PO","SP","MLT","64335MLT D100","R380","R380","8A+7B+8B","COVER ASSY,R FUEL TANK","1513","2026/02/16","10","64335MLTD10ZB" +"K*SP**","PO","SP","K64","64340K64 J002","NH436M","NH436M","旧型","COVER,R FRONT SIDE","1513","2026/02/26","10","64340K64J00ZA" +"K*SP**","PO","SP","MKW","64340MKW D000","TYPE1","NHA86M","0","SET ILLUS,L MIDDLE COWL A","1513","2026/02/17","10","64340MKWD00ZD" +"K*SP**","PO","SP","MKW","64340MKW D000","TYPE3","R380","0","SET ILLUS,L MIDDLE COWL A","1513","2026/02/24","10","64340MKWD00ZB" +"K*SP**","PO","SP","MKW","64340MKW D000","TYPE4","B197M","0","SET ILLUS,L MIDDLE COWL A","1513","2026/02/03","10","64340MKWD00ZA" +"K*SP**","PO","SP","MKW","64340MKW D700","TYPE1","R134","D700AA","SET ILLUS,L MIDDLE COWL","1513","2026/02/23","5","64340MKWD70ZC" +"K*SP**","PO","SP","MKW","64340MKW D700","TYPE2","NHB54P","D700AA","SET ILLUS,L MIDDLE COWL","1513","2026/02/03","15","64340MKWD70ZB" +"K*SP**","PO","SP","MLRX","64340MLR Y800","TYPE1","NHA86M","D800AA","SET ILLUS,L FR SIDE COWL","1513","2026/02/26","15","64340MLRY80ZA" +"K*SP**","PO","SP","MJC","64350MJC LS00 01","NHC47P","NHC47P","8A","SET ILLUS,L MIDDLE COWL","1513","2026/02/06","5","64350MJCLS0ZA" +"K*SP**","PO","SP","MKT","64350MKT D700","NHB01","NHB01","D700AA","COWL ASSY,L RR SIDE","1513","2026/02/10","10","64350MKTD70ZB" +"K*SP**","PO","SP","MKT","64350MKT D700","NHB53P","NHB53P","D700AA","COWL ASSY,L RR SIDE","1513","2026/02/18","5","64350MKTD70ZA" +"K*SP**","PO","SP","MKT","64350MKT D700","NHD05","NHD05","D700AA","COWL ASSY,L RR SIDE","1513","2026/02/26","5","64350MKTD70ZC" +"K*SP**","PO","SP","MKW","64351MKW D000","NHB01","NHB01","0","COWL B,R MIDDLE","1513","2026/02/13","5","64351MKWD00ZC" +"K*SP**","PO","SP","MKW","64351MKW D000","NHC08M","NHC08M","0","COWL B,R MIDDLE","1513","2026/02/26","15","64351MKWD00ZA" +"K*SP**","PO","SP","MKT","64360MKT D800","Y242","Y242","D700AA","SET ILLUS,L SIDE COWL","1513","2026/02/09","15","64360MKTD80ZA" +"K*SP**","PO","SP","MLN1","64360MLN E100","NHA86M","NHA86M","1型 8A","SET ILLUS,L MIDDLE COWL","1513","2026/02/24","5","64360MLNE10ZA" +"K*SP**","PO","SP","MKT","64361MKT D000","NHA86M","NHA86M","D000AA 旧型","COWL,L SIDE","1513","2026/02/10","10","64361MKTD00ZG" +"K*SP**","PO","SP","MKT","64361MKT D000","NHB01","NHB01","D000AA 旧型","COWL,L SIDE","1513","2026/02/04","5","64361MKTD00ZD" +"K*SP**","PO","SP","MKT","64361MKT D000","NHC08M","NHC08M","D000AA 旧型","COWL,L SIDE","1513","2026/02/23","10","64361MKTD00ZC" +"K*SP**","PO","SP","MKT","64361MKT D000","NHC47P","NHC47P","D000AA 旧型","COWL,L SIDE","1513","2026/02/06","5","64361MKTD00ZB" +"K*SP**","PO","SP","MKT","64361MKT D000","NHC64M","NHC64M","D000AA 旧型","COWL,L SIDE","1513","2026/02/05","10","64361MKTD00ZF" +"K*SP**","PO","SP","MKT","64361MKT D000","R380","R380","D000AA 旧型","COWL,L SIDE","1513","2026/02/24","5","64361MKTD00ZA" +"K*SP**","PO","SP","MKT","64361MKT D700","NHB01","NHB01","D700AA","COWL,L SIDE","1513","2026/02/10","10","64361MKTD70ZB" +"K*SP**","PO","SP","MKT","64361MKT D700","NHB53P","NHB53P","D700AA","COWL,L SIDE","1513","2026/02/18","5","64361MKTD70ZA" +"K*SP**","PO","SP","MKV","64361MKV D500 01","NHA86M","NHA86M","D500AA","COWL,L FRONT SIDE A","1513","2026/02/18","15","64361MKVD50ZC" +"K*SP**","PO","SP","MKV","64361MKV D500 01","YR386M","YR386M","D500AA","COWL,L FRONT SIDE A","1513","2026/02/18","5","64361MKVD50ZA" +"K*SP**","PO","SP","MKW","64361MKW D000","NHB01","NHB01","0","COWL B,L MIDDLE","1513","2026/02/12","10","64361MKWD00ZC" +"K*SP**","PO","SP","MKW","64361MKW D000","NHC08M","NHC08M","0","COWL B,L MIDDLE","1513","2026/02/27","15","64361MKWD00ZA" +"K*SP**","PO","SP","MKZ","64365MKZ J300 01","R380","R380","0","COWL ASSY,L MIDDLE","1513","2026/02/12","20","64365MKZJ30ZA" +"K*SP**","PO","SP","MKZ","64365MKZ J300 01","R380","R380","0","COWL ASSY,L MIDDLE","1513","2026/02/13","20","64365MKZJ30ZA" +"K*SP**","PO","SP","MKZ","64365MKZ J400 01","NHA86M","NHA86M","0","COWL ASSY,L MIDDLE","1513","2026/02/24","10","64365MKZJ40ZA" +"K*SP**","PO","SP","MKZ","64370MKZ J400","NHA86M","NHA86M","0","SET ILLUS,L WINGLET","1513","2026/02/24","25","64370MKZJ40ZA" +"K*SP**","PO","SP","MKPX","64400MKP KQ00","TYPE2","NHB53P","J800AA","SET ILLUS,L MIDDLE COWL","1513","2026/02/16","5","64400MKPKQ0ZA" +"K*SP**","PO","SP","MKZ","64400MKZ J300","TYPE1","R380","0","SET ILLUS,R UNDER COWL","1513","2026/02/10","15","64400MKZJ30ZA" +"K*SP**","PO","SP","MKZ","64400MKZ J300","TYPE1","R380","0","SET ILLUS,R UNDER COWL","1513","2026/02/11","15","64400MKZJ30ZA" +"K*SP**","PO","SP","MKZ","64400MKZ J300","TYPE2","NHA86M","0","SET ILLUS,R UNDER COWL","1513","2026/02/23","10","64400MKZJ30ZB" +"K*SP**","PO","SP","MLB","64400MLB D200","TYPE1","NHB54P","0","SET ILLUS,L SHROUD A","1513","2026/02/03","15","64400MLBD20ZD" +"K*SP**","PO","SP","MLB","64400MLB D200","TYPE4","NHA86M","0","SET ILLUS,L SHROUD A","1513","2026/02/26","10","64400MLBD20ZA" +"K*SP**","PO","SP","MLB","64400MLB G400","TYPE1","NHB54P","0","SET ILLUS,L SHROUD A","1513","2026/02/05","5","64400MLBG40ZC" +"K*SP**","PO","SP","MLRR","64400MLR J200","R380","R380","D000AA","SET ILLUS,L MIDDLE COWL","1513","2026/02/17","10","64400MLRJ20ZA" +"K*SP**","PO","SP","MLF","64410MLF E800","NHC52MC","NHC52MC","8A E800AA","SET ILLUS,L MIDDLE COWL","1513","2026/02/17","5","64410MLFE80ZC" +"K*SP**","PO","SP","MLF","64410MLF E800","PB409PC","PB409PC","8A E800AA","SET ILLUS,L MIDDLE COWL","1513","2026/02/26","10","64410MLFE80ZB" +"K*SP**","PO","SP","MLF","64410MLF E800","YR386M","YR386M","8A E800AA","SET ILLUS,L MIDDLE COWL","1513","2026/02/18","10","64410MLFE80ZA" +"K*SP**","PO","SP","MLL","64410MLL D000","NHB01","NHB01","8A","SET ILLUS,L SHROUD A","1513","2026/02/17","15","64410MLLD00ZA" +"K*SP**","PO","SP","MKV","64411MKV D000","NHA86M","NHA86M","0","SKIRT,R FLOOR","1513","2026/02/11","15","64411MKVD00ZE" +"K*SP**","PO","SP","MKV","64411MKV D000","NHA86M","NHA86M","0","SKIRT,R FLOOR","1513","2026/02/12","15","64411MKVD00ZE" +"K*SP**","PO","SP","MKV","64411MKV D000","NHA86M","NHA86M","0","SKIRT,R FLOOR","1513","2026/02/13","10","64411MKVD00ZE" +"K*SP**","PO","SP","MKV","64411MKV D000","NHC08M","NHC08M","0","SKIRT,R FLOOR","1513","2026/02/20","20","64411MKVD00ZC" +"K*SP**","PO","SP","MKV","64411MKV D000","PB417M","PB417M","0","SKIRT,R FLOOR","1513","2026/02/26","20","64411MKVD00ZB" +"K*SP**","PO","SP","MKV","64411MKV D000","R381C","R381C","0","SKIRT,R FLOOR","1513","2026/02/25","5","64411MKVD00ZA" +"K*SP**","PO","SP","MKR","64420MKR DH00 01","TYPE2","R380","8A+7B+8B","COWL ASSY,R UNDER","1513","2026/02/25","5","64420MKRDH0ZA" +"K*SP**","PO","SP","MKT","64421MKT D000","NHC08M","NHC08M","D000AA 旧型","COVER,R SKIRT","1513","2026/02/20","5","64421MKTD00ZA" +"K*SP**","PO","SP","MLT","64435MLT D100 01","R380","R380","8A+7B+8B","COVER ASSY,L FUEL TANK","1513","2026/02/17","10","64435MLTD10ZB" +"K*SP**","PO","SP","K64","64440K64 J002","NH436M","NH436M","旧型","COVER,L FRONT SIDE","1513","2026/02/27","10","64440K64J00ZA" +"K*SP**","PO","SP","K64","64440K64 J002","R380","R380","旧型","COVER,L FRONT SIDE","1513","2026/02/26","10","64440K64J00ZB" +"K*SP**","PO","SP","MKPX","64440MKP KQ00","NHB01","NHB01","J800AA","SET ILLUS,L SIDE COWL A","1513","2026/02/27","10","64440MKPKQ0ZA" +"K*SP**","PO","SP","MJC","64450MJC LS00 01","NHC47P","NHC47P","8A","COWL COMP,L UNDER","1513","2026/02/06","5","64450MJCLS0ZA" +"K*SP**","PO","SP","MKV","64461MKV D000","NHA86M","NHA86M","0","SKIRT,L FLOOR","1513","2026/02/16","15","64461MKVD00ZE" +"K*SP**","PO","SP","MKV","64461MKV D000","NHA86M","NHA86M","0","SKIRT,L FLOOR","1513","2026/02/17","15","64461MKVD00ZE" +"K*SP**","PO","SP","MKV","64461MKV D000","NHA86M","NHA86M","0","SKIRT,L FLOOR","1513","2026/02/18","10","64461MKVD00ZE" +"K*SP**","PO","SP","MKV","64461MKV D000","NHB01","NHB01","0","SKIRT,L FLOOR","1513","2026/02/11","10","64461MKVD00ZD" +"K*SP**","PO","SP","MKV","64461MKV D000","NHB01","NHB01","0","SKIRT,L FLOOR","1513","2026/02/12","10","64461MKVD00ZD" +"K*SP**","PO","SP","MKV","64461MKV D000","NHC08M","NHC08M","0","SKIRT,L FLOOR","1513","2026/02/23","5","64461MKVD00ZC" +"K*SP**","PO","SP","MKV","64461MKV D000","PB417M","PB417M","0","SKIRT,L FLOOR","1513","2026/02/27","5","64461MKVD00ZB" +"K*SP**","PO","SP","MKT","64471MKT D000","NHC64M","NHC64M","D000AA 旧型","COVER,L SKIRT","1513","2026/02/03","5","64471MKTD00ZC" +"K*SP**","PO","SP","K64","64600K64 JK01","TYPE1","素材","86838K64 JK00 T-1黒マット","SET ILLUS,L MID INNER COWL","1513","2026/02/27","5","64600K64JK0ZA" +"K*SP**","PO","SP","MKV","64600MKV D000","NHA86M","NHA86M","0","PANEL ASSY,R SIDE","1513","2026/02/12","5","64600MKVD00ZG" +"K*SP**","PO","SP","MKV","64600MKV D000","PB417M","PB417M","0","PANEL ASSY,R SIDE","1513","2026/02/26","15","64600MKVD00ZB" +"K*SP**","PO","SP","MKV","64600MKV D000","YR386M","YR386M","","PANEL ASSY,R SIDE","1513","2026/02/17","5","64600MKVD00ZH" +"K*SP**","PO","SP","MKV","64620MKV D010 01","NHA86M","NHA86M","","COVER ASSY,R PIVOT","1513","2026/02/12","10","64620MKVD01ZD" +"K*SP**","PO","SP","MKV","64650MKV D000","NHB01","NHB01","0","PANEL ASSY,L SIDE","1513","2026/02/11","5","64650MKVD00ZD" +"K*SP**","PO","SP","MKV","64650MKV D000","PB417M","PB417M","0","PANEL ASSY,L SIDE","1513","2026/02/27","5","64650MKVD00ZB" +"K*SP**","PO","SP","MKV","64670MKV D010","NHC08M","NHC08M","0","COVER ASSY,L PIVOT","1513","2026/02/23","5","64670MKVD01ZB" +"K*SP**","PO","SP","MKZ","77210MKZ J300 01","TYPE1","R380","0","SET ILLUS,SEAT RR COWL","1513","2026/02/10","20","77210MKZJ30ZA" +"K*SP**","PO","SP","MKZ","77210MKZ J300 01","TYPE1","R380","0","SET ILLUS,SEAT RR COWL","1513","2026/02/11","20","77210MKZJ30ZA" +"K*SP**","PO","SP","MKT","77211MKT D010","NHA86M","NHA86M","D000AA","COWL,R REAR","1513","2026/02/09","15","77211MKTD01ZG" +"K*SP**","PO","SP","MKT","77211MKT D010","NHC47P","NHC47P","D000AA","COWL,R REAR","1513","2026/02/09","5","77211MKTD01ZB" +"K*SP**","PO","SP","MKT","77211MKT D010","NHC64M","NHC64M","D000AA","COWL,R REAR","1513","2026/02/04","15","77211MKTD01ZF" +"K*SP**","PO","SP","MFP","77220MFP JU00 03","TYPE1 2","NHA66P/R381C","8A+7A+8B+7B+8C","COWL ASSY,REAR","1513","2026/02/03","5","77220MFPJU0ZD" +"K*SP**","PO","SP","MFP","77220MFP JU00 03","TYPE2 2","NHB01/NHC52M","8A+7A+8B+7B+8C","COWL ASSY,REAR","1513","2026/02/04","5","77220MFPJU0ZC" +"K*SP**","PO","SP","MKR","77220MKR D100 02","TYPE2","R380","7B","SET ILLUS,SEAT CENTER COWL","1513","2026/02/23","10","77220MKRD10ZA" +"K*SP**","PO","SP","MKV","77220MKV D500 01","TYPE2","NHA86M","D500AA","SET ILLUS,R REAR COWL","1513","2026/02/12","5","77220MKVD50ZB" +"K*SP**","PO","SP","MLB","77240MLB D800","TYPE1","NHA86M","","SET ILLUS,R REAR COWL A","1513","2026/02/25","5","77240MLBD80ZD" +"K*SP**","PO","SP","MLB","77240MLB D800","TYPE2","NHA86M","","SET ILLUS,R REAR COWL A","1513","2026/02/23","5","77240MLBD80ZC" +"K*SP**","PO","SP","MLB","77240MLB D800","TYPE3","NHC65M","","SET ILLUS,R REAR COWL A","1513","2026/02/12","5","77240MLBD80ZB" +"K*SP**","PO","SP","MLB","77240MLB D800","TYPE4 1","NHD19M","","SET ILLUS,R REAR COWL A","1513","2026/02/13","5","77240MLBD80ZE" +"K*SP**","PO","SP","MLB","77240MLB G400","TYPE1","NHB54P","","SET ILLUS,R REAR COWL A","1513","2026/02/04","10","77240MLBG40ZC" +"K*SP**","PO","SP","MLV","77240MLV J100 01","NHB01","NHB01","8A+7B","SET ILLUS,R REAR COWL","1513","2026/02/16","5","77240MLVJ10ZA" +"K*SP**","PO","SP","MLL","77241MLL D001","NHA86M","NHA86M","","COWL,R RR LOWER","1513","2026/02/02","5","77241MLLD00ZD" +"K*SP**","PO","SP","MLB","77250MLB D800","TYPE1","NHA86M","","SET ILLUS,L REAR COWL A","1513","2026/02/26","5","77250MLBD80ZD" +"K*SP**","PO","SP","MLB","77250MLB D800","TYPE2","NHA86M","","SET ILLUS,L REAR COWL A","1513","2026/02/24","5","77250MLBD80ZC" +"K*SP**","PO","SP","MLB","77250MLB D800","TYPE3","NHC65M","","SET ILLUS,L REAR COWL A","1513","2026/02/13","5","77250MLBD80ZB" +"K*SP**","PO","SP","MLB","77250MLB D800","TYPE4 1","NHD19M","","SET ILLUS,L REAR COWL A","1513","2026/02/16","5","77250MLBD80ZE" +"K*SP**","PO","SP","MLB","77250MLB G400","TYPE1","NHB54P","","SET ILLUS,L REAR COWL A","1513","2026/02/05","15","77250MLBG40ZC" +"K*SP**","PO","SP","MLV","77250MLV J000 01","TYPE1 1","NHD19M","8A+7B","SET ILLUS,L REAR COWL","1513","2026/02/16","10","77250MLVJ00ZD" +"K*SP**","PO","SP","MLV","77250MLV J100 01","NHB01","NHB01","8A+7B","SET ILLUS,L REAR COWL","1513","2026/02/17","5","77250MLVJ10ZA" +"K*SP**","PO","SP","MLL","77251MLL D001","NHA86M","NHA86M","","COWL,L RR LOWER","1513","2026/02/03","10","77251MLLD00ZD" +"K*SP**","PO","SP","MLL","77251MLL D001","NHB53P","NHB53P","","COWL,L RR LOWER","1513","2026/02/18","5","77251MLLD00ZC" +"K*SP**","PO","SP","MKR","77260MKR D100","TYPE1","NHB01","7B","SET ILLUS,REAR CENTER UPPER COWL","1513","2026/02/04","5","77260MKRD10ZB" +"K*SP**","PO","SP","MLL","77260MLL D100","NHA86M","NHA86M","8A","SET ILLUS,REAR UPPER COWL","1513","2026/02/03","10","77260MLLD10ZA" +"K*SP**","PO","SP","MKT","77261MKT D010","NHA86M","NHA86M","D000AA","COWL,L REAR","1513","2026/02/10","10","77261MKTD01ZG" +"K*SP**","PO","SP","MKT","77261MKT D010","NHB01","NHB01","D000AA","COWL,L REAR","1513","2026/02/10","5","77261MKTD01ZD" +"K*SP**","PO","SP","MKT","77261MKT D010","NHB53P","NHB53P","D000AA","COWL,L REAR","1513","2026/02/18","5","77261MKTD01ZK" +"K*SP**","PO","SP","MKT","77261MKT D010","NHC08M","NHC08M","D000AA","COWL,L REAR","1513","2026/02/23","5","77261MKTD01ZC" +"K*SP**","PO","SP","MKT","77261MKT D010","NHC64M","NHC64M","D000AA","COWL,L REAR","1513","2026/02/05","10","77261MKTD01ZF" +"K*SP**","PO","SP","MKT","77261MKT D010","NHD05","NHD05","D000AA","COWL,L REAR","1513","2026/02/26","10","77261MKTD01ZH" +"K*SP**","PO","SP","MKT","77261MKT D010","R380","R380","D000AA","COWL,L REAR","1513","2026/02/24","15","77261MKTD01ZA" +"K*SP**","PO","SP","MKV","77270MKV D500 01","TYPE2","NHA86M","D500AA","SET ILLUS,L REAR COWL","1513","2026/02/17","5","77270MKVD50ZB" +"K*SP**","PO","SP","MKT","77413MKT D000","NHC64M","NHC64M","D000AA","COVER,FUEL LID","1513","2026/02/04","5","77413MKTD00ZD" +"K*SP**","PO","SP","MKT","77413MKT D000","NHD05","NHD05","D000AA","COVER,FUEL LID","1513","2026/02/25","5","77413MKTD00ZG" +"K*SP**","PO","SP","K88","80100K88 J001","B187","B187","0","FENDER,REAR","1513","2026/02/02","10","80100K88J00ZP" +"K*SP**","PO","SP","K88","80100K88 J001","B197M","B197M","0","FENDER,REAR","1513","2026/02/03","5","80100K88J00ZJ" +"K*SP**","PO","SP","K88","80100K88 J001","G142M","G142M","0","FENDER,REAR","1513","2026/02/02","5","80100K88J00ZG" +"K*SP**","PO","SP","K88","80100K88 J001","G208M","G208M","0","FENDER,REAR","1513","2026/02/27","5","80100K88J00ZU" +"K*SP**","PO","SP","K88","80100K88 J001","NHC47P","NHC47P","0","FENDER,REAR","1513","2026/02/05","5","80100K88J00ZT" +"K*SP**","PO","SP","K88","80100K88 J001","YR211","YR211","0","FENDER,REAR","1513","2026/02/18","5","80100K88J00ZB" +"K*SP**","PO","SP","MKZ","80110MKZ J300","TYPE1","R380","0","SHELTER ASSY,FRONT","1513","2026/02/12","15","80110MKZJ30ZB" +"K*SP**","PO","SP","MKZ","80110MKZ J300","TYPE1","R380","0","SHELTER ASSY,FRONT","1513","2026/02/13","15","80110MKZJ30ZB" +"K*SP**","PO","SP","MKZ","80120MKZ J300","R380","R380","8A+7B+8B","SHELTER ASSY,RR","1513","2026/02/12","15","80120MKZJ30ZA" +"K*SP**","PO","SP","MKZ","80120MKZ J300","R380","R380","8A+7B+8B","SHELTER ASSY,RR","1513","2026/02/13","15","80120MKZJ30ZA" +"K*SP**","PO","SP","MKC","80122MKC A001","TYPE1","R367C","7B+8A","COVER ASSY A,R SDLBG RR","1513","2026/02/24","5","80122MKCA00ZA" +"K*SP**","PO","SP","MKC","80122MLJ A000","TYPE2","NHC65M","7B+8A","COVER ASSY A,R SDLBG RR","1513","2026/02/12","5","80122MLJA00ZB" +"K*SP**","PO","SP","MKC","80122MLJ A000","TYPE3","NHB01","7B+8A","COVER ASSY A,R SDLBG RR","1513","2026/02/05","20","80122MLJA00ZA" +"K*SP**","PO","SP","MKC","80122MLJ M500","NHC33P","NHC33P","8A","COVER ASSY A,R SDLBG RR","1513","2026/02/19","5","80122MLJM50ZD" +"K*SP**","PO","SP","MKC","80132MKC A001","TYPE1","R367C","7B+8A","COVER ASSY A,L SDLBG RR","1513","2026/02/25","5","80132MKCA00ZA" +"K*SP**","PO","SP","MKC","80132MKC A001","TYPE4","NHB70M","8A","COVER ASSY A,L SDLBG RR","1513","2026/02/12","5","80132MKCA00ZD" +"K*SP**","PO","SP","MKC","80132MLJ A000","TYPE1","R337M","7B+8A","COVER ASSY A,L SDLBG RR","1513","2026/02/18","15","80132MLJA00ZC" +"K*SP**","PO","SP","MKC","80132MLJ A000","TYPE2","NHC65M","7B+8A","COVER ASSY A,L SDLBG RR","1513","2026/02/13","5","80132MLJA00ZB" +"K*SP**","PO","SP","MKC","80132MLJ A000","TYPE3","NHB01","7B+8A","COVER ASSY A,L SDLBG RR","1513","2026/02/06","10","80132MLJA00ZA" +"K*SP**","PO","SP","MKC","80132MLJ M500","NHA86M","NHA86M","8A","COVER ASSY A,L SDLBG RR","1513","2026/02/04","5","80132MLJM50ZB" +"K*SP**","PO","SP","MKC","80132MLJ M500","NHC33P","NHC33P","8A","COVER ASSY A,L SDLBG RR","1513","2026/02/20","5","80132MLJM50ZD" +"K*SP**","PO","SP","K88","80151K88 J001","R201","R201","スタンダード・ビジネス","COVER,CENTER","1513","2026/02/13","5","80151K88J00ZJ" +"K*SP**","PO","SP","K88","80151K88 J001","Y124P","Y124P","スタンダード・ビジネス","COVER,CENTER","1513","2026/02/19","5","80151K88J00ZA" +"K*SP**","PO","SP","K88","80151K88 J001","YR176","YR176","スタンダード・ビジネス","COVER,CENTER","1513","2026/02/25","5","80151K88J00ZH" +"K*SP**","PO","SP","MKC","81113MKC A002","NHB70M","NHB70M","8A","COVER ASSY,R TRUNK SIDE","1513","2026/02/10","10","81113MKCA00ZA" +"K*SP**","PO","SP","MKC","81113MKC L001","TYPE3","NHC52M","(2R-TR CVR)7B+8A","COVER ASSY,R TRUNK SIDE","1513","2026/02/12","5","81113MKCL00ZA" +"K*SP**","PO","SP","MKC","81113MKC L301","NHC47P","NHC47P","(2R-TR CVR)7B+8A","COVER ASSY,R TRUNK SIDE","1513","2026/02/02","5","81113MKCL30ZA" +"K*SP**","PO","SP","MKC","81113MKC LG00 01","PB417M","PB417M","(2R-TR CVR)7B+8A","COVER ASSY,R TRUNK SIDE","1513","2026/02/02","5","81113MKCLG0ZB" +"K*SP**","PO","SP","MKC","81113MLJ A500","NHC64M","NHC64M","(2R-TR CVR)7B+8A","COVER ASSY,R TRUNK SIDE","1513","2026/02/02","15","81113MLJA50ZA" +"K*SP**","PO","SP","MKC","81115MKC L300","NHC47P","NHC47P","(2CTR TR LWR)7B","SET ILLUS,COVER CTR TRUNK LWR","1513","2026/02/02","5","81115MKCL30ZA" +"K*SP**","PO","SP","MKC","81115MKC LG01","PB417M","PB417M","(2CTR TR LWR)7B","SET ILLUS,COVER CTR TRUNK LWR","1513","2026/02/02","5","81115MKCLG0ZB" +"K*SP**","PO","SP","MKC","81115MLJ A500","NHC64M","NHC64M","(2CTR TR LWR)7B","SET ILLUS,COVER CTR TRUNK LWR","1513","2026/02/02","15","81115MLJA50ZA" +"K*SP**","PO","SP","MKC","81115MLJ M200","TYPE1","R337M","(2CTR TR LWR)7B","SET ILLUS,COVER CTR TRUNK LWR","1513","2026/02/19","5","81115MLJM20ZA" +"K*SP**","PO","SP","MKC","81116MKC L000","YR387MC","YR387MC","","COVER CENTER,TRUNK LWR","1513","2026/02/25","10","81116MKCL00ZR" +"K*SP**","PO","SP","MKC","81120MLJ A200","TYPE2","NHC07M/NHC65M","(2TL)8A+7A+7B+8B(EMB)","SET ILLUS,TRUNK LID","1513","2026/02/05","5","81120MLJA20ZA" +"K*SP**","PO","SP","MKC","81120MLJ M000","TYPE1","NHA30M","(2TL)7B+8A","SET ILLUS,TRUNK LID","1513","2026/02/06","5","81120MLJM00ZA" +"K*SP**","PO","SP","MKC","81120MLJ M200","TYPE1","R337M","(2TL)7B+8A","SET ILLUS,TRUNK LID","1513","2026/02/19","5","81120MLJM20ZA" +"K*SP**","PO","SP","K88","81130K88 B500","TYPE1","G208M","クロスカブ","SET ILLUS,R MAIN PIPE COVER","1513","2026/02/27","5","81130K88B50ZD" +"K*SP**","PO","SP","K88","81140K88 B210","TYPE1","NHB01","クロスカブ くまモン","SET ILLUS,L MAIN PIPE COVER","1513","2026/02/27","5","81140K88B21ZA" +"K*SP**","PO","SP","K88","81140K88 B500","TYPE3","PB417M","クロスカブ","SET ILLUS,L MAIN PIPE COVER","1513","2026/02/03","5","81140K88B50ZB" +"K*SP**","PO","SP","MKC","81213MKC A002","NHB70M","NHB70M","8A","COVER ASSY,L TRUNK SIDE","1513","2026/02/11","10","81213MKCA00ZA" +"K*SP**","PO","SP","MKC","81213MKC L001","TYPE3","NHC52M","(2L-TR CVR)7B+8A","COVER ASSY,L TRUNK SIDE","1513","2026/02/13","5","81213MKCL00ZA" +"K*SP**","PO","SP","MKC","81213MKC L301","NHC47P","NHC47P","(2L-TR CVR)7B+8A","COVER ASSY,L TRUNK SIDE","1513","2026/02/03","5","81213MKCL30ZA" +"K*SP**","PO","SP","MKC","81213MKC LG00 01","PB417M","PB417M","(2L-TR CVR)7B+8A","COVER ASSY,L TRUNK SIDE","1513","2026/02/03","5","81213MKCLG0ZB" +"K*SP**","PO","SP","MKC","81213MLJ A500","NHC64M","NHC64M","(2L-TR CVR)7B+8A","COVER ASSY,L TRUNK SIDE","1513","2026/02/03","15","81213MLJA50ZA" +"K*SP**","PO","SP","MKC","81213MLJ M700","YR387M","YR387M","8A+7B+8B","COVER ASSY,L TRUNK SIDE","1513","2026/02/25","5","81213MLJM70ZA" +"K*SP**","PO","SP","MKC","81320MKC EC00 01","TYPE3","NH463M","7B+8A(EMB)","SET ILLUS,R SADDLEBAG LID","1513","2026/02/04","5","81320MKCEC0ZA" +"K*SP**","PO","SP","MLA","81320MLA A300","NHC52M","NHC52M","","LID OUTER,R SADDLEBAG","1513","2026/02/12","10","81320MLAA30ZB" +"K*SP**","PO","SP","MKC","81320MLJ M200","R337M","R337M","8A+7B+8B(EMB)","SET ILLUS,R SADDLEBAG LID","1513","2026/02/17","5","81320MLJM20ZA" +"K*SP**","PO","SP","MKC","81320MLJ M500","NHA86M","NHA86M","8A","SET ILLUS,R SADDLEBAG LID","1513","2026/02/03","10","81320MLJM50ZA" +"K*SP**","PO","SP","MKC","81320MLJ M700","YR387M","YR387M","8A+7B+8B(EMB)","SET ILLUS,R SADDLEBAG LID","1513","2026/02/24","10","81320MLJM70ZA" +"K*SP**","PO","SP","MLA","81363MLA A301","G208M","G208M","","PANEL,R SADDLEBAG","1513","2026/02/27","5","81363MLAA30ZF" +"K*SP**","PO","SP","MLA","81363MLA A301","NHC65M","NHC65M","","PANEL,R SADDLEBAG","1513","2026/02/12","5","81363MLAA30ZC" +"K*SP**","PO","SP","MLA","81420MLA A300","NHC52M","NHC52M","","LID OUTER,L SADDLEBAG","1513","2026/02/13","5","81420MLAA30ZB" +"K*SP**","PO","SP","MKC","81420MLJ M200","R337M","R337M","8A+7B+8B(EMB)","SET ILLUS,L SADDLEBAG LID","1513","2026/02/18","5","81420MLJM20ZA" +"K*SP**","PO","SP","MKC","81420MLJ M500","NHA86M","NHA86M","8A","SET ILLUS,L SADDLEBAG LID","1513","2026/02/04","10","81420MLJM50ZA" +"K*SP**","PO","SP","MLA","81463MLA A301","NHC52M","NHC52M","","PANEL,L SADDLEBAG","1513","2026/02/13","10","81463MLAA30ZB" +"K*SP**","PO","SP","MLA","81463MLA A301","NHC65M","NHC65M","","PANEL,L SADDLEBAG","1513","2026/02/13","5","81463MLAA30ZC" +"K*SP**","PO","SP","MKC","81491MLJ M500","YR387MC","YR387MC","8A","COVER ASSY,L SADDLEBAG UP","1513","2026/02/25","5","81491MLJM50ZC" +"K*SP**","PO","SP","MKC","81520MKC A100","NH463M","NH463M","7B","SET ILLUS,RR TOP LID R","1513","2026/02/04","5","81520MKCA10ZN" +"K*SP**","PO","SP","MKC","81520MKC A100","TYPE1","R367C","7B","SET ILLUS,RR TOP LID R","1513","2026/02/24","10","81520MKCA10ZC" +"K*SP**","PO","SP","MKC","81520MLJ A000","NHC65M","NHC65M","7B","SET ILLUS,RR TOP LID R","1513","2026/02/05","5","81520MLJA00ZB" +"K*SP**","PO","SP","MKC","81525MKC A100","NH463M","NH463M","7B","SET ILLUS,RR TOP LID L","1513","2026/02/05","5","81525MKCA10ZN" +"K*SP**","PO","SP","MKC","81525MLJ A000","NHC65M","NHC65M","7B","SET ILLUS,RR TOP LID L","1513","2026/02/06","5","81525MLJA00ZB" +"K*SP**","PO","SP","MKC","81550MKC A100","NHA86M","NHA86M","","COVER,CTR RR TOP","1513","2026/02/04","5","81550MKCA10ZK" +"K*SP**","PO","SP","MKC","81551MKC A100","NHA86M","NHA86M","","LID R,RR TOP","1513","2026/02/03","15","81551MKCA10ZK" +"K*SP**","PO","SP","MKC","81555MKC A100","NHA86M","NHA86M","","COVER,INNER RR TOP","1513","2026/02/04","15","81555MKCA10ZK" +"K*SP**","PO","SP","MKC","81556MKC A100","NHA86M","NHA86M","","LID L,RR TOP","1513","2026/02/04","5","81556MKCA10ZK" +"K*SP**","PO","SP","MKC","81570MKC A100","NHA86M","NHA86M","","COVER,END RR TOP","1513","2026/02/04","5","81570MKCA10ZK" +"K*SP**","PO","SP","MKC","83140MLJ E100","TYPE1","NHB01","7B(E700)","SET ILLUS,L SIDE SHELTER","1513","2026/02/06","5","83140MLJE10ZC" +"K*SP**","PO","SP","K64","83160K64 JH01","TYPE2","NHB53P","0","SET ILLUS,R TANK COVER","1513","2026/02/26","5","83160K64JH0ZA" +"K*SP**","PO","SP","K64","83170K64 J210 01","TYPE1","NH436M","旧型","SET ILLUS,L TANK COVER","1513","2026/02/27","5","83170K64J21ZB" +"K*SP**","PO","SP","K64","83170K64 JM00","NHB53P","NHB53P","","SET ILLUS,L TANK COVER","1513","2026/02/27","10","83170K64JM0ZA" +"K*SP**","PO","SP","MKR","83170MKR DH00","R380","R380","8A+7B+8B","COVER ASSY,L SIDE","1513","2026/02/26","10","83170MKRDH0ZA" +"K*SP**","PO","SP","MLM","83180MLM E000","TYPE1","NHB01","7B","SET ILLUS,R SIDE SHELTER","1513","2026/02/19","25","83180MLME00ZC" +"K*SP**","PO","SP","MLM","83180MLM E000","TYPE2","NHC33P","7B","SET ILLUS,R SIDE SHELTER","1513","2026/02/19","25","83180MLME00ZB" +"K*SP**","PO","SP","MLM","83180MLM E000","TYPE3","NHC47P","7B","SET ILLUS,R SIDE SHELTER","1513","2026/02/10","25","83180MLME00ZA" +"K*SP**","PO","SP","MLM","83190MLM E000","TYPE1","NHB01","7B","SET ILLUS,L SIDE SHELTER","1513","2026/02/20","25","83190MLME00ZC" +"K*SP**","PO","SP","MLM","83190MLM E000","TYPE2","NHC33P","7B","SET ILLUS,L SIDE SHELTER","1513","2026/02/20","25","83190MLME00ZB" +"K*SP**","PO","SP","MLM","83190MLM E000","TYPE3","NHC47P","7B","SET ILLUS,L SIDE SHELTER","1513","2026/02/11","25","83190MLME00ZA" +"K*SP**","PO","SP","MLM","83510MLM E000","TYPE1","NHB01","8A+7B+8B","COVER A ASSY,R SIDE","1513","2026/02/23","15","83510MLME00ZC" +"K*SP**","PO","SP","MLM","83510MLM E000","TYPE2","NHC33P","8A+7B+8B","COVER A ASSY,R SIDE","1513","2026/02/19","15","83510MLME00ZB" +"K*SP**","PO","SP","MLM","83510MLM E000","TYPE3 2","NHC47P","8A+7B+8B","COVER A ASSY,R SIDE","1513","2026/02/10","15","83510MLME00ZD" +"K*SP**","PO","SP","MKW","83520MKW D000","TYPE1","NHA86M","7B","SET ILLUS,R SIDE SHELTER","1513","2026/02/19","5","83520MKWD00ZD" +"K*SP**","PO","SP","MKW","83520MKW D000","TYPE2","NHB53P","7B","SET ILLUS,R SIDE SHELTER","1513","2026/02/17","5","83520MKWD00ZC" +"K*SP**","PO","SP","MKW","83520MKW D000","TYPE4","B197M","7B","SET ILLUS,R SIDE SHELTER","1513","2026/02/04","5","83520MKWD00ZA" +"K*SP**","PO","SP","MLM","83520MLM E000","TYPE1","YR396M","7B","SET ILLUS,R SIDE COVER B","1513","2026/02/06","15","83520MLME00ZC" +"K*SP**","PO","SP","MLM","83520MLM E000","TYPE2","NHB01","7B","SET ILLUS,R SIDE COVER B","1513","2026/02/19","15","83520MLME00ZB" +"K*SP**","PO","SP","MLM","83520MLM E000","TYPE3","NHC08M","7B","SET ILLUS,R SIDE COVER B","1513","2026/02/26","15","83520MLME00ZA" +"K*SP**","PO","SP","K3R","83530K3R J000 02","NH389M","NH389M","","SET ILLUS,R SIDE COVER","1513","2026/02/25","5","83530K3RJ00ZE" +"K*SP**","PO","SP","K3R","83530K3R J000 02","Y248","Y248","","SET ILLUS,R SIDE COVER","1513","2026/02/18","5","83530K3RJ00ZD" +"K*SP**","PO","SP","MLM","83600MLM E000","TYPE1","NHB01","8A+7B","SET ILLUS,L SIDE COVER A","1513","2026/02/24","15","83600MLME00ZF" +"K*SP**","PO","SP","MLM","83600MLM E000","TYPE2","NHC33P","8A+7B","SET ILLUS,L SIDE COVER A","1513","2026/02/20","15","83600MLME00ZE" +"K*SP**","PO","SP","MLM","83600MLM E000","TYPE3 1","NHC47P","8A+7B","SET ILLUS,L SIDE COVER A","1513","2026/02/11","15","83600MLME00ZG" +"K*SP**","PO","SP","MLN4","83600MLN ER00","NHC64M","NHC64M","4型 8A","COWL ASSY,R RR SIDE","1513","2026/02/06","5","83600MLNER0ZA" +"K*SP**","PO","SP","MKS1","83610MLG E500","TYPE1","B197M","1型 8A+7B","SET ILLUS,R RR SIDE COWL A","1513","2026/02/04","5","83610MLGE50ZA" +"K*SP**","PO","SP","MKC","83610MLJ A000","TYPE1","NHB01","7B","SET ILLUS,R SIDE COVER","1513","2026/02/05","5","83610MLJA00ZC" +"K*SP**","PO","SP","MKC","83610MLJ AA00","TYPE2","G208M","7B","SET ILLUS,R SIDE COVER","1513","2026/02/27","5","83610MLJAA0ZA" +"K*SP**","PO","SP","MLV","83610MLV J000","TYPE1 1","NHD19M","8A+7B","SET ILLUS,R SIDE COVER","1513","2026/02/13","5","83610MLVJ00ZD" +"K*SP**","PO","SP","MKC","83611MKC A000","NH389M","NH389M","0","COVER A,R SIDE","1513","2026/02/24","5","83611MKCA00ZW" +"K*SP**","PO","SP","MKC","83611MKC A000","NHA86M","NHA86M","0","COVER A,R SIDE","1513","2026/02/03","10","83611MKCA00ZH" +"K*SP**","PO","SP","MKPX","83611MKP J800","NHB70M","NHB70M","J800AA","COVER A,L SIDE","1513","2026/02/12","5","83611MKPJ80ZD" +"K*SP**","PO","SP","MLF","83611MLF E800","PB409PC","PB409PC","E800AA","COWL A,R RR SIDE","1513","2026/02/27","15","83611MLFE80ZB" +"K*SP**","PO","SP","MKW","83620MKW D000","TYPE3","R380","7B","SET ILLUS,L SIDE SHELTER","1513","2026/02/24","5","83620MKWD00ZB" +"K*SP**","PO","SP","MLM","83620MLM E000","TYPE1","YR396M","7B","SET ILLUS,L SIDE COVER B","1513","2026/02/09","15","83620MLME00ZC" +"K*SP**","PO","SP","MLM","83620MLM E000","TYPE2","NHB01","7B","SET ILLUS,L SIDE COVER B","1513","2026/02/20","15","83620MLME00ZB" +"K*SP**","PO","SP","MLM","83620MLM E000","TYPE3","NHC08M","7B","SET ILLUS,L SIDE COVER B","1513","2026/02/27","15","83620MLME00ZA" +"K*SP**","PO","SP","MKW","83621MKW D700","NHB54P","NHB54P","D700AA","SHELTER,L SIDE","1513","2026/02/05","5","83621MKWD70ZC" +"K*SP**","PO","SP","K3R","83630K3R J000 02","NH389M","NH389M","カット","SET ILLUS,L SIDE COVER","1513","2026/02/26","5","83630K3RJ00ZE" +"K*SP**","PO","SP","K3R","83630K3R J000 02","Y248","Y248","カット","SET ILLUS,L SIDE COVER","1513","2026/02/19","5","83630K3RJ00ZD" +"K*SP**","PO","SP","K64","83635K64 JH01","TYPE1","NHB01","23YM","SET ILLUS,L REAR COWL","1513","2026/02/27","20","83635K64JH0ZB" +"K*SP**","PO","SP","K64","83650K64 NP00","NH389M","NH389M","25YM","COVER,SEAT LOCK","1513","2026/02/27","3","83650K64NP0ZF" +"K*SP**","PO","SP","MKS1","83650MKS E000 04","TYPE1","NHA86M","1型 7B","SET ILLUS,R RR SIDE COWL C","1513","2026/02/05","10","83650MKSE00ZA" +"K*SP**","PO","SP","MJC","83701MJC A000","R380","R380","0","COVER,L SIDE","1513","2026/02/26","5","83701MJCA00ZD" +"K*SP**","PO","SP","MKC","83710MLJ M200","TYPE1","R337M","7B","SET ILLUS,L SIDE COVER","1513","2026/02/18","5","83710MLJM20ZA" +"K*SP**","PO","SP","MKC","83711MKC A000","NH389M","NH389M","0","COVER A,L SIDE","1513","2026/02/26","5","83711MKCA00ZW" +"K*SP**","PO","SP","MKC","83711MKC A000","YR387MC","YR387MC","0","COVER A,L SIDE","1513","2026/02/25","5","83711MKCA00ZV" +"K*SP**","PO","SP","GJB","83712GJB J000","NHC08M","NHC08M","0","COVER,RR CENTER","1513","2026/02/20","10","83712GJBJ00YB" +"K*SP**","PO","SP","GX1","83712GJB J000","R134","R134","0","COVER,RR CENTER","1513","2026/02/23","5","83712GJBJ00ZT" +"K*SP**","PO","SP","MKS1","83750MKS E000 04","TYPE1","NHA86M","1型 7B","SET ILLUS,L RR SIDE COWL C","1513","2026/02/06","5","83750MKSE00ZA" +"K*SP**","PO","SP","MKC","88130MLJ M000 01","YR387MC","YR387MC","(ミネベア素材)","COVER,R MIRROR","1513","2026/02/24","15","88130MLJM00ZE" +"K*SP**","PO","SP","MKC","88135MKC A000 01","TYPE1","R367C","7B","SET ILLUS,R MIRROR COVER","1513","2026/02/24","5","88135MKCA00ZE" +"K*SP**","PO","SP","MKC","88135MKC A000 01","TYPE2","NHB53P","7B","SET ILLUS,R MIRROR COVER","1513","2026/02/13","5","88135MKCA00ZD" +"K*SP**","PO","SP","MKC","88135MKC A000 01","TYPE3","YR347P","7B","SET ILLUS,R MIRROR COVER","1513","2026/02/03","5","88135MKCA00ZC" +"K*SP**","PO","SP","MKC","88135MKC A000 01","TYPE4","NHB70M","0","SET ILLUS,R MIRROR COVER","1513","2026/02/10","5","88135MKCA00ZB" +"K*SP**","PO","SP","MKC","88135MKC A000 01","TYPE5","NH463M","7B","SET ILLUS,R MIRROR COVER","1513","2026/02/04","25","88135MKCA00ZA" +"K*SP**","PO","SP","MKC","88135MKC A000 01","TYPE6","PB409P","7B","SET ILLUS,R MIRROR COVER","1513","2026/02/10","5","88135MKCA00ZF" +"K*SP**","PO","SP","MKC","88135MKC L200","TYPE1","NHC33P","(KENSEI)7B","SET ILLUS,R MIRROR COVER","1513","2026/02/19","10","88135MKCL20ZA" +"K*SP**","PO","SP","MKC","88135MLJ M000 01","TYPE1","NHA30M","(ミネベア素材)7B","SET ILLUS,R MIRROR COVER","1513","2026/02/06","5","88135MLJM00ZA" +"K*SP**","PO","SP","MKC","88135MLJ M200 01","TYPE1","R337M","(ミネベア素材)7B","SET ILLUS,R MIRROR COVER","1513","2026/02/17","20","88135MLJM20ZA" +"K*SP**","PO","SP","MKC","88140MLJ M000 01","YR387MC","YR387MC","(ミネベア素材)","COVER,L MIRROR","1513","2026/02/25","5","88140MLJM00ZE" +"K*SP**","PO","SP","MKC","88145MKC A000 01","TYPE1","R367C","7B","SET ILLUS,L MIRROR COVER","1513","2026/02/25","15","88145MKCA00ZE" +"K*SP**","PO","SP","MKC","88145MKC A000 01","TYPE2","NHB53P","7B","SET ILLUS,L MIRROR COVER","1513","2026/02/16","20","88145MKCA00ZD" +"K*SP**","PO","SP","MKC","88145MKC A000 01","TYPE3","YR347P","7B","SET ILLUS,L MIRROR COVER","1513","2026/02/02","10","88145MKCA00ZC" +"K*SP**","PO","SP","MKC","88145MKC A000 01","TYPE4","NHB70M","0","SET ILLUS,L MIRROR COVER","1513","2026/02/11","5","88145MKCA00ZB" +"K*SP**","PO","SP","MKC","88145MKC A000 01","TYPE5","NH463M","7B","SET ILLUS,L MIRROR COVER","1513","2026/02/05","10","88145MKCA00ZA" +"K*SP**","PO","SP","MKC","88145MKC A000 01","TYPE6","PB409P","7B","SET ILLUS,L MIRROR COVER","1513","2026/02/11","10","88145MKCA00ZF" +"K*SP**","PO","SP","MKC","88145MLJ A000","TYPE1","NHB01","7B","SET ILLUS,L MIRROR COVER","1513","2026/02/06","25","88145MLJA00ZA" +"K*SP**","PO","SP","MKC","88145MLJ AR00","TYPE1","NHC47P","(ミネベア素材)7B","SET ILLUS,L MIRROR COVER","1513","2026/02/06","10","88145MLJAR0ZD" +"K*SP**","PO","SP","MKC","88145MLJ M000 01","TYPE1","NHA30M","(ミネベア素材)7B","SET ILLUS,L MIRROR COVER","1513","2026/02/09","5","88145MLJM00ZA" +"K*SP**","PO","SP","MKC","88145MLJ M200 01","TYPE1","R337M","(ミネベア素材)7B","SET ILLUS,L MIRROR COVER","1513","2026/02/18","5","88145MLJM20ZA" diff --git a/docs/060 データ/DB.xlsx b/docs/060 データ/DB.xlsx new file mode 100644 index 0000000..4becd5f Binary files /dev/null and b/docs/060 データ/DB.xlsx differ diff --git a/docs/060 データ/POSP_20260310A.zip b/docs/060 データ/POSP_20260310A.zip new file mode 100644 index 0000000..7982e4f Binary files /dev/null and b/docs/060 データ/POSP_20260310A.zip differ diff --git a/src/ExcelToCsvToDb/.gitattributes b/src/ExcelToCsvToDb/.gitattributes new file mode 100644 index 0000000..1ff0c42 --- /dev/null +++ b/src/ExcelToCsvToDb/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/src/ExcelToCsvToDb/App.config b/src/ExcelToCsvToDb/App.config new file mode 100644 index 0000000..712c93a --- /dev/null +++ b/src/ExcelToCsvToDb/App.config @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/ExcelToCsvToDb/BusinessLogic/ExcelToCsv.cs b/src/ExcelToCsvToDb/BusinessLogic/ExcelToCsv.cs new file mode 100644 index 0000000..baa67c7 --- /dev/null +++ b/src/ExcelToCsvToDb/BusinessLogic/ExcelToCsv.cs @@ -0,0 +1,4287 @@ +using ClosedXML.Excel; +using DocumentFormat.OpenXml; +using DocumentFormat.OpenXml.Drawing; +using DocumentFormat.OpenXml.EMMA; +using DocumentFormat.OpenXml.ExtendedProperties; +using DocumentFormat.OpenXml.Office2010.Excel; +using DocumentFormat.OpenXml.Office2010.ExcelAc; +using DocumentFormat.OpenXml.Office2016.Excel; +using DocumentFormat.OpenXml.Presentation; +using DocumentFormat.OpenXml.Spreadsheet; +using DocumentFormat.OpenXml.VariantTypes; +using DocumentFormat.OpenXml.Vml; +using DocumentFormat.OpenXml.Wordprocessing; +using ExcelToCsvToDb.Commons; +using ExcelToCsvToDb.DTO; +using ExcelToCsvToDbCommon.Class; +using KssSmaPlaLib.Batch.Commons; +using KssSmaPlaLib.Batch.Interface; +using KssSmaPlaLib.Commons; +using KssSmaPlaLib.Commons.Conversion; +using KssSmaPlaLib.DtoMapping.Attributes; +using KssSmaPlaLib.InBox; +using KssSmaPlaLib.Ini; +using KssSmaPlaLib.IO.Excel; +using KssSmaPlaLib.IO.File; +using Microsoft.Extensions.Logging.Abstractions; +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Text.RegularExpressions; +using System.Windows.Forms; + +namespace ExcelToCsvToDb.BusinessLogic +{ + /// + /// Excel→CSV処理クラス + /// + public class ExcelToCsv + { + /// + /// 日付並びの年月取得モード + /// + private enum ENUM_EXCEL_DATE_YM_GET_MODE + { + None, + + /// + /// 年月セルから取得 + /// (アルミ) + /// + FromYMCells, + + /// + /// 日付型セル値より取得 + /// (MC) + /// + FromDateCell, + + /// + /// 日付型特定セル値より取得 + /// (PoSp) + /// + FromTargetCellDate, + + /// + /// シート名から取得 + /// + FromSheetName, + } + + /// + /// 日付並びの年月取得モードのINI値(文字列) + /// + private const string KEY_EXCEL_DATE_YM_GET_MODE_FROM_YM_CELLS = "FromYMCells"; + private const string KEY_EXCEL_DATE_YM_GET_MODE_FROM_DATE_CELL = "FromDateCell"; + private const string KEY_EXCEL_DATE_YM_GET_MODE_FROM_TARGET_CELL_DATE = "TargetCellDate"; + private const string KEY_EXCEL_DATE_YM_GET_MODE_FROM_SHEET_NAME = "FromSheetName"; + + /// + /// ExcelToCsv機能(WeOrder版) + /// + /// INIパス + /// セクション名 + /// 結果DTO + public FuncExcelToCsvWeOrderByIniResultDto TryFuncExcelToCsvWeOrderByIni( + string iniFilePath, + string sectionName) + { + // INIキー定義 + const string KEY_IN_FOLDER_PATH = "InFolderPath"; + const string KEY_FILE_NAME_PATTERN = "FileNamePattern"; + const string KEY_EXCEL_SHEET_CHECK_ITEMS = "ExcelSheetCheckItems"; + const string KEY_CSV_FILE_NAME = "CsvFileName"; + const string KEY_OUT_FOLDER_PATH = "OutFolderPath"; + const string KEY_FILE_DT_PREFIX = "FileDtPrefix"; + const string KEY_FILE_DT_SUFFIX = "FileDtSuffix"; + const string KEY_CSV_ENCODING = "CsvEncoding"; + + // 結果DTO + var result = new FuncExcelToCsvWeOrderByIniResultDto(); + + // 現在日時 + DateTime now = DateTime.Now; + + LoggerUxer.Info($"Excel→CSV機能(溶接加工計画)を開始します。"); + + // INI取得 + var iniDic = IniReferenceResolveUxer.ReadSectionWithReference( + iniFilePath, sectionName); + + // アイテムと列レターのマッピング辞書作成 + if (!TryCreateItemColumnMappingDic(iniDic, out ItemColumnMappingDic, out var messageForMe)) + { + LoggerUxer.Error(messageForMe); + result.Succeeded = false; + result.ExitCode = (int)Common.RetCode.CreateItemExcelColumnMappingDicError; + result.ResultMessage = messageForMe; + return result; + } + + // 開始日取得 + if (!CommonUxer.TryGetStartDate(iniDic, out var startDate, out messageForMe)) + { + var msg = $"開始日の取得に失敗しました。[エラー内容:{messageForMe}]"; + LoggerUxer.Error(msg); + result.Succeeded = false; + result.ExitCode = (int)Common.RetCode.StartDateError; + result.ResultMessage = msg; + return result; + } + LoggerUxer.Info($"[開始日:{startDate:yyyy/MM/dd}]"); + + // 入力フォルダパス + var inFolderPath = DictionaryUxer.GetValueOrDefault(iniDic, KEY_IN_FOLDER_PATH, string.Empty); + if (!CheckInFolder(inFolderPath, out messageForMe)) + { + LoggerUxer.Error(messageForMe); + result.Succeeded = false; + result.ExitCode = (int)Common.RetCode.InFolderPathError; + result.ResultMessage = messageForMe; + return result; + } + LoggerUxer.Info($"[入力フォルダ:{inFolderPath}]"); + + // 対象ファイル群取得 + var fileNamePattern = DictionaryUxer.GetValueOrDefault(iniDic, KEY_FILE_NAME_PATTERN, "*"); + if (!GetFiles( + iniDic, + inFolderPath, + fileNamePattern, + out List files, + out messageForMe)) + { + LoggerUxer.Error(messageForMe); + result.Succeeded = false; + result.ExitCode = (int)Common.RetCode.TargetFilesGetError; + result.ResultMessage = messageForMe; + return result; + } + + if (files.Count == 0) + { + var msg = $"対象ファイルがありません。[{KEY_IN_FOLDER_PATH}:{inFolderPath},{KEY_FILE_NAME_PATTERN}={fileNamePattern}]"; + LoggerUxer.Warn(msg); + result.Succeeded = true; + result.ResultMessage = msg; + // ワーニングでも成功 + return result; + } + + // シートチェック項目取得 + var sheetCheckStr = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_SHEET_CHECK_ITEMS, string.Empty); + LoggerUxer.Info($"[Excelシートチェック項目:{sheetCheckStr}]"); + if (!TryGetExcelSheetCheckItemsFromIni(sheetCheckStr, out var sheetCheckItems)) + { + var msg = $"Excelシートチェック項目が不正です。[キー:{KEY_EXCEL_SHEET_CHECK_ITEMS},値:{sheetCheckStr}]"; + LoggerUxer.Error(msg); + result.Succeeded = false; + result.ExitCode = (int)Common.RetCode.ExcelSheelCheckItemInvalid; + result.ResultMessage = msg; + return result; + } + + try + { + var weOrderList = new List(); + + // 1ファイル処理 + foreach (var file in files) + { + var ret = RunOneFile(sectionName, file, now, sheetCheckItems, iniDic, startDate, weOrderList); + if (ret != (int)Common.RetCode.Success) + { + result.Succeeded = false; + result.ExitCode = ret; + return result; + } + } + + if (weOrderList.Count == 0) + { + var msg = $"対象データがありません。[{KEY_IN_FOLDER_PATH}:{inFolderPath},{KEY_FILE_NAME_PATTERN}={fileNamePattern}]"; + LoggerUxer.Warn(msg); + result.Succeeded = true; + result.ResultMessage = msg; + // ワーニングでも成功 + return result; + } + + // ファイル名:未指定時はエラーとする + var fileName = DictionaryUxer.GetValueOrDefault(iniDic, KEY_CSV_FILE_NAME, string.Empty); + if (string.IsNullOrEmpty(fileName)) + { + var msg = $"設定ファイルにCSVファイル名が指定されていません。[キー:{KEY_CSV_FILE_NAME}]"; + LoggerUxer.Error(msg); + result.Succeeded = false; + result.ExitCode = (int)Common.RetCode.CsvFileNameNotSetting; + result.ResultMessage = msg; + return result; + } + + if (fileName.IndexOf('.') == -1) + { + // 拡張子がないとき、付与する + fileName += ".csv"; + LoggerUxer.Info($"CSVファイル名に拡張子を付与しました。[ファイル名:{fileName}]"); + } + + // CSVファイルパス作成 + var csvPath = PathUxer.CreateFullPathEx( + DictionaryUxer.GetValueOrDefault(iniDic, KEY_OUT_FOLDER_PATH, string.Empty), + fileName, + DictionaryUxer.GetValueOrDefault(iniDic, KEY_FILE_DT_PREFIX, string.Empty), + DictionaryUxer.GetValueOrDefault(iniDic, KEY_FILE_DT_SUFFIX, string.Empty)); + LoggerUxer.Info($"[CSVファイルパス:{csvPath}]"); + + // リストを圧縮(重複キーは排除) + var maeCnt = weOrderList.Count; + weOrderList = weOrderList + .GroupBy(x => new + { + x.LineName, + x.BasicPartsNo, + x.WorkDate + }) + .Select(g => new WeOrderDto + { + LineId = g.Min(x => x.LineId), + LineName = g.Key.LineName, + BasicPartsNo = g.Key.BasicPartsNo, + WorkDate = g.Key.WorkDate, + CreateRecordDate = g.Min(x => x.CreateRecordDate), + AfAmount = g.Sum(x => x.AfAmount), + WeAmount = g.Sum(x => x.WeAmount), + KdWeAmount = g.Sum(x => x.KdWeAmount), + ProductionLur = g.Max(x => x.ProductionLur), + ModelCd = g.Min(x => x.ModelCd), + Derivation = g.Min(x => x.Derivation), + TactTime = g.Min(x => x.TactTime) + }) + .ToList(); + + var atoCnt = weOrderList.Count; + LoggerUxer.Info($"再集計圧縮完了。[前:{maeCnt}件,後:{atoCnt}件]"); + + // エンコーディング指定(オプション) + var encodingTypeName = DictionaryUxer.GetValueOrDefault(iniDic, KEY_CSV_ENCODING, "utf8"); + var encodingType = EncodingUxer.GetEncodingType(encodingTypeName); + if (encodingType == null) + { + encodingType = EncodingUxer.EncodingType.Utf8WithoutBom; + LoggerUxer.Warn($"CSVエンコーディングタイプ名が不正です。UFT-8で処理します。[キー:{KEY_CSV_ENCODING},値:{encodingTypeName}]"); + } + + // リストをCSV出力 + if (!CsvUxer.ExportToCsv( + weOrderList, + csvPath, + out messageForMe, + (EncodingUxer.EncodingType)encodingType)) + { + LoggerUxer.Error(messageForMe); + result.Succeeded = false; + result.ExitCode = (int)Common.RetCode.ExportToCsvError; + result.ResultMessage = messageForMe; + return result; + } + LoggerUxer.Info($"[出力件数:{weOrderList.Count}]"); + + LoggerUxer.Info($"Excel→CSV機能(溶接加工計画)が終了しました。"); + + result.Succeeded = true; + return result; + } + catch (Exception ex) + { + var msg = $"エラーが発生しました。[Run(),エラー内容:{ex.Message}]"; + LoggerUxer.Error(msg); + result.Succeeded = false; + result.ExitCode = (int)Common.RetCode.ExcelToCsvException; + result.ResultMessage = msg; + return result; + } + } + + /// + /// ExcelToCsv機能(簡易版) + /// + /// INIパス + /// セクション名 + /// 結果DTO + public FuncExcelToCsvWeOrderByIniResultDto TryFuncExcelToCsvEazyByIni( + string iniFilePath, + string sectionName) + { + // INIキー定義 + const string KEY_IN_FOLDER_PATH = "InFolderPath"; + const string KEY_FILE_NAME_PATTERN = "FileNamePattern"; + const string KEY_EXCEL_SHEET_CHECK_ITEMS = "ExcelSheetCheckItems"; + const string KEY_OUTPUT_TYPE = "OutputType"; + const string KEY_CSV_FILE_NAME = "CsvFileName"; + const string KEY_OUT_FOLDER_PATH = "OutFolderPath"; + const string KEY_FILE_DT_PREFIX = "FileDtPrefix"; + const string KEY_FILE_DT_SUFFIX = "FileDtSuffix"; + const string KEY_CSV_ENCODING = "CsvEncoding"; + const string KEY_KANI_TOKUSHU = "KaniTokushu"; + + // 結果DTO + var result = new FuncExcelToCsvWeOrderByIniResultDto(); + + // ラインIDヘルパー + LineIdHelper lineIdHelper = new LineIdHelper(); + + // 現在日時 + DateTime now = DateTime.Now; + + LoggerUxer.Info($"Excel→CSV機能(簡易版)を開始します。"); + + // INI取得 + var iniDic = IniReferenceResolveUxer.ReadSectionWithReference( + iniFilePath, sectionName); + + // 開始日取得 + if (!CommonUxer.TryGetStartDate(iniDic, out var startDate, out var messageForMe)) + { + var msg = $"開始日の取得に失敗しました。[エラー内容:{messageForMe}]"; + LoggerUxer.Error(msg); + result.Succeeded = false; + result.ExitCode = (int)Common.RetCode.StartDateError; + result.ResultMessage = msg; + return result; + } + LoggerUxer.Info($"[開始日:{startDate:yyyy/MM/dd}]"); + + // 終了日取得(指定ありのときのみ) + if (!CommonUxer.TryGetEndDate(iniDic, startDate, out var endDate, out messageForMe)) + { + var msg = $"終了日の取得に失敗しました。[エラー内容:{messageForMe}]"; + LoggerUxer.Error(msg); + result.Succeeded = false; + result.ExitCode = (int)Common.RetCode.EndDateError; + result.ResultMessage = msg; + return result; + } + if (endDate is null) + { + LoggerUxer.Info($"[終了日:なし]"); + } + else + { + LoggerUxer.Info($"[終了日:{((DateTime)endDate):yyyy/MM/dd}]"); + } + + // 入力フォルダパス + var inFolderPath = DictionaryUxer.GetValueOrDefault(iniDic, KEY_IN_FOLDER_PATH, string.Empty); + if (!CheckInFolder(inFolderPath, out messageForMe)) + { + LoggerUxer.Error(messageForMe); + result.Succeeded = false; + result.ExitCode = (int)Common.RetCode.InFolderPathError; + result.ResultMessage = messageForMe; + return result; + } + LoggerUxer.Info($"[入力フォルダ:{inFolderPath}]"); + + // 対象ファイル群取得 + var fileNamePattern = DictionaryUxer.GetValueOrDefault(iniDic, KEY_FILE_NAME_PATTERN, "*"); + if (!GetFiles( + iniDic, + inFolderPath, + fileNamePattern, + out List files, + out messageForMe)) + { + LoggerUxer.Error(messageForMe); + result.Succeeded = false; + result.ExitCode = (int)Common.RetCode.TargetFilesGetError; + result.ResultMessage = messageForMe; + return result; + } + + if (files.Count == 0) + { + var msg = $"対象ファイルがありません。[{KEY_IN_FOLDER_PATH}:{inFolderPath},{KEY_FILE_NAME_PATTERN}={fileNamePattern}]"; + LoggerUxer.Warn(msg); + result.Succeeded = true; + result.ResultMessage = msg; + // ワーニングでも成功 + return result; + } + + try + { + var lineList = new List(); + + // 1ファイル処理 + foreach (var file in files) + { + // ライン判別とINI更新 + if (!LineHanteiFromFilePathAndReloadIni( + file, iniDic, sectionName, + out var id, out var excelSettings, out messageForMe)) + { + LoggerUxer.Error($"ライン判別とINI更新に失敗しました。[詳細:{messageForMe}]"); + result.Succeeded = false; + result.ExitCode = (int)Common.RetCode.ExcelSettingsError; + return result; + } + + // ラインID更新 + lineIdHelper.FileLineId = id; + + // アイテムと列レターのマッピング辞書作成 + if (!TryCreateRetsuDic(iniDic, out var cdList, out messageForMe)) + { + LoggerUxer.Error(messageForMe); + result.Succeeded = false; + result.ExitCode = (int)Common.RetCode.ExcelSettingsError; + return result; + } + + // 特殊処理判定 + var kaniTokushu = DictionaryUxer.GetValueOrDefault(iniDic, KEY_KANI_TOKUSHU, string.Empty); + LoggerUxer.Info($"[簡易特殊処理({KEY_KANI_TOKUSHU}):{(string.IsNullOrEmpty(kaniTokushu) ? "なし" : kaniTokushu)}]"); + switch (kaniTokushu) + { + case "": + // 特殊なし:処理継続 + break; + case "鋳造LPDC": + // 鋳造LPDC + if (!TryKaniChuzoLpdc(file, out var tokushuOutList, out messageForMe)) + { + LoggerUxer.Error($"特殊処理(鋳造LPDC)に失敗しました。[詳細:{messageForMe}]"); + result.Succeeded = false; + result.ExitCode = (int)Common.RetCode.KaniTokushuError; + return result; + } + lineList.AddRange(CreateFormattedTextAll(iniDic, cdList, tokushuOutList)); + lineIdHelper.FileLineId = -1; + continue; + case "鋳造GDC": + // 鋳造GDC + if (!TryKaniChuzoGdc(file, out tokushuOutList, out messageForMe)) + { + LoggerUxer.Error($"特殊処理(鋳造GDC)に失敗しました。[詳細:{messageForMe}]"); + result.Succeeded = false; + result.ExitCode = (int)Common.RetCode.KaniTokushuError; + return result; + } + lineList.AddRange(CreateFormattedTextAll(iniDic, cdList, tokushuOutList)); + lineIdHelper.FileLineId = -1; + continue; + default: + LoggerUxer.Error($"簡易特殊処理の指定が不正です。[{KEY_KANI_TOKUSHU}:{kaniTokushu}]"); + result.Succeeded = false; + result.ExitCode = (int)Common.RetCode.KaniTokushuError; + return result; + } + + // シートチェック項目取得 + var sheetCheckStr = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_SHEET_CHECK_ITEMS, string.Empty); + LoggerUxer.Info($"[Excelシートチェック項目:{sheetCheckStr}]"); + if (!TryGetExcelSheetCheckItemsFromIni(sheetCheckStr, out var sheetCheckItems)) + { + var msg = $"Excelシートチェック項目が不正です。[キー:{KEY_EXCEL_SHEET_CHECK_ITEMS},値:{sheetCheckStr}]"; + LoggerUxer.Error(msg); + result.Succeeded = false; + result.ExitCode = (int)Common.RetCode.ExcelSheelCheckItemInvalid; + result.ResultMessage = msg; + return result; + } + + // 1ファイル処理 + var outList = new List(); + var ret = RunOneFileEazy( + file, now, sheetCheckItems, + iniDic, excelSettings, + startDate, endDate, + lineIdHelper, + cdList, outList); + if (ret != (int)Common.RetCode.Success) + { + result.Succeeded = false; + result.ExitCode = ret; + return result; + } + + // 出力タイプ + var type = DictionaryUxer.GetValueOrDefault(iniDic, KEY_OUTPUT_TYPE, "CSV"); + switch (type) + { + case "FormattedText": + lineList.AddRange(CreateFormattedTextAll(iniDic, cdList, outList)); + break; + default: + // CSV扱い + // ヘッダ + lineList.Add( + ColumnDefinition.GetCsvHeader(cdList)); + // データ + lineList.AddRange( + outList.Select( + row => string.Join( + ",", row.Select(field => $"\"{field}\"")))); + break; + } + lineIdHelper.FileLineId = -1; + } + + if (lineList.Count == 0) + { + var msg = $"対象データがありません。[{KEY_IN_FOLDER_PATH}:{inFolderPath},{KEY_FILE_NAME_PATTERN}={fileNamePattern}]"; + LoggerUxer.Warn(msg); + result.Succeeded = true; + result.ResultMessage = msg; + // ワーニングでも成功 + return result; + } + + // ファイル名:未指定時はエラーとする + var fileName = DictionaryUxer.GetValueOrDefault(iniDic, KEY_CSV_FILE_NAME, string.Empty); + if (string.IsNullOrEmpty(fileName)) + { + var msg = $"設定ファイルにCSVファイル名が指定されていません。[キー:{KEY_CSV_FILE_NAME}]"; + LoggerUxer.Error(msg); + result.Succeeded = false; + result.ExitCode = (int)Common.RetCode.CsvFileNameNotSetting; + result.ResultMessage = msg; + return result; + } + + if (fileName.IndexOf('.') == -1) + { + // 拡張子がないとき、付与する + fileName += ".csv"; + LoggerUxer.Info($"CSVファイル名に拡張子を付与しました。[ファイル名:{fileName}]"); + } + + // 出力ファイルパス作成 + var outputFilePath = PathUxer.CreateFullPathEx( + DictionaryUxer.GetValueOrDefault(iniDic, KEY_OUT_FOLDER_PATH, string.Empty), + fileName, + DictionaryUxer.GetValueOrDefault(iniDic, KEY_FILE_DT_PREFIX, string.Empty), + DictionaryUxer.GetValueOrDefault(iniDic, KEY_FILE_DT_SUFFIX, string.Empty)); + LoggerUxer.Info($"[CSVファイルパス:{outputFilePath}]"); + + // エンコーディング指定(オプション) + var encodingTypeName = DictionaryUxer.GetValueOrDefault(iniDic, KEY_CSV_ENCODING, "utf8"); + var encodingType = EncodingUxer.GetEncodingType(encodingTypeName); + if (encodingType == null) + { + encodingType = EncodingUxer.EncodingType.Utf8WithoutBom; + LoggerUxer.Warn($"CSVエンコーディングタイプ名が不正です。UFT-8で処理します。[キー:{KEY_CSV_ENCODING},値:{encodingTypeName}]"); + } + + // 出力 + System.IO.File.WriteAllLines( + outputFilePath, lineList, + EncodingUxer.GetEncoding( + (EncodingUxer.EncodingType)encodingType)); + + LoggerUxer.Info($"[出力件数:{lineList.Count}]"); + + LoggerUxer.Info($"Excel→CSV機能(簡易版)が終了しました。"); + + result.Succeeded = true; + return result; + } + catch (Exception ex) + { + var msg = $"エラーが発生しました。[Run(),エラー内容:{ex.Message}]"; + LoggerUxer.Error(msg); + result.Succeeded = false; + result.ExitCode = (int)Common.RetCode.ExcelToCsvException; + result.ResultMessage = msg; + return result; + } + } + + /// + /// 簡易処理(鋳造LPDC) + /// + /// + /// + /// + /// + /// + private static bool TryKaniChuzoLpdc( + string filePath, + out List outList, + out string resultMessage) + { + const string SHEET_NAME_JISSEKI_NYURYOKU = "実績入力"; + const string SHEET_NAME_CHUZO_IN = "鋳造IN"; + + outList = new List(); + resultMessage = string.Empty; + + try + { + // 開く + using (var book = LoadWorkbookWithoutPhoneticError(filePath)) + { + // シート有無CK + if (!book.Worksheets.Any(m => m.Name == SHEET_NAME_JISSEKI_NYURYOKU)) + { + resultMessage = $"「実績入力」シートがありません。[ファイル:{filePath}]"; + return false; + } + if (!book.Worksheets.Any(m => m.Name == SHEET_NAME_CHUZO_IN)) + { + resultMessage = $"「鋳造IN」シートがありません。[ファイル:{filePath}]"; + return false; + } + + // 実績入力IN + List jnList = new List(); + var sheet = book.Worksheet(SHEET_NAME_JISSEKI_NYURYOKU); + for (var row = 12; ; row++) + { + if (string.IsNullOrEmpty(sheet.Cell(row, 2).GetFormattedString().Trim())) + { + break; + } + jnList.Add(new KaniChuzoLpdcJissekiNyuryokuDto() + { + Date = DateTime.TryParse(sheet.Cell(row, 2).GetFormattedString().Trim(), out var dat) ? dat : DateTime.MinValue, + Kishu = sheet.Cell(row, 3).GetFormattedString().Trim(), + Suryo = int.TryParse(sheet.Cell(row, 4).GetFormattedString().Trim(), out var intv) ? intv : int.MinValue, + Furyo = int.TryParse(sheet.Cell(row, 5).GetFormattedString().Trim(), out intv) ? intv : int.MinValue, + Hensu = sheet.Cell(row, 6).GetFormattedString().Trim(), + }); + } + + // 鋳造ININ + List ciList = new List(); + sheet = book.Worksheet(SHEET_NAME_CHUZO_IN); + var yearText = XlUxer.GCell(sheet, 2, 3).GetFormattedString().Replace("年", "").Trim(); + var year = int.TryParse(yearText, out var intVal) ? intVal : 1900; + var monthText = XlUxer.GCell(sheet, 2, 5).GetFormattedString().Replace("月", "").Trim(); + var month = int.TryParse(monthText, out intVal) ? intVal : 1; + var karaCnt = 0; + for (var row = 7; ; row++) + { + if (string.IsNullOrEmpty(sheet.Cell(row, 2).GetFormattedString().Trim())) + { + karaCnt++; + if (karaCnt >= 10) + { + break; + } + continue; + } + karaCnt = 0; + for (var col = 5; ; col++) + { + var dayText = sheet.Cell(6, col).GetFormattedString().Trim(); + if (string.IsNullOrEmpty(dayText)) break; + if (dayText == "TLL") break; + if (!int.TryParse(dayText, out var dayInt)) break; + + var text = sheet.Cell(row, col).GetFormattedString().Trim(); + if (string.IsNullOrEmpty(text)) continue; + if (text == "0") continue; + + var su = int.TryParse(text, out intVal) ? intVal : int.MinValue; + ciList.Add(new KaniChuzoLpdcChuzoInDto() + { + Kishu = sheet.Cell(row, 2).GetFormattedString().Trim(), + Buban = sheet.Cell(row, 3).GetFormattedString().Trim(), + Kubun = sheet.Cell(row, 4).GetFormattedString().Trim(), + Date = new DateTime(year, month, dayInt), + Su = su, + }); + } + } + + // 【残】jnListとciListをマージして、outListに出力する + + //var jn1 = jnList + // .Select(m => new { m.Kishu, m.Date, m.Suryo }) + // .OrderBy(m => m.Kishu) + // .ThenBy(m => m.Date) + // .ToList(); + //foreach (var dto in jnList) + // System.Diagnostics.Debug.WriteLine( + // $"{dto.Kishu}\t{dto.Date}\t{dto.Suryo}"); + //var ci1 = ciList + // .GroupBy(m=>new {m.Kishu,m.Date}) + // .Select(m => new { m.Key.Kishu, m.Key.Date, Total = m.Sum(n=>n.Su), }) + // .OrderBy(m => m.Kishu) + // .ThenBy(m => m.Date) + // .ToList(); + //foreach (var dto in ciList) + // System.Diagnostics.Debug.WriteLine( + // $"{dto.Kishu}\t{dto.Date}\t{dto.Su}"); + } + + } + catch (Exception ex) + { + LoggerUxer.Error($"特殊処理(鋳造LPDC)にてエラーが発生しました。[{ex.Message}]"); + return false; + } + + return true; + } + + /// + /// 簡易処理(鋳造GDC) + /// + /// + /// + /// + /// + private static bool TryKaniChuzoGdc( + string filePath, + out List outList, + out string resultMessage) + { + const string SHEET_NAME_BEFORE = "*月*鋳造計画"; + const string SHEET_NAME_AFTER = "払出し"; + + outList = new List(); + resultMessage = string.Empty; + + try + { + // 開く + using (var book = LoadWorkbookWithoutPhoneticError(filePath)) + { + LoggerUxer.Info($"[対象ファイル:{filePath}]"); + var targetIn = false; + foreach (var sheet in book.Worksheets) + { + if (StringUxer.WildcardMatch(sheet.Name, SHEET_NAME_BEFORE)) + { + // 対象シート開始前検知(次のシートから対象にする) + targetIn = true; + continue; + } + if (StringUxer.WildcardMatch(sheet.Name, SHEET_NAME_AFTER)) + { + // 対象シート終了後検知(シート処理終わり) + break; + } + // 対象シート中でないとき飛ばす + if (!targetIn) continue; + + // 一応シートのチェック + if (sheet.Cell("E2").GetFormattedString().Trim()!= "鋳造MO" || + sheet.Cell("E3").GetFormattedString().Trim() != "GDC" || + sheet.Cell("K3").GetFormattedString().Trim() != "月生産管理") + { + resultMessage = $"シート内容が不正です。[ファイル:{filePath},シート:{sheet.Name}]"; + return false; + } + LoggerUxer.Info($"[対象シート:{sheet.Name}]"); + + var kugyoCnt = 0; + for (var row = 7; row < 1000; row++) + { + var a = XlUxer.GCell(sheet, "A" + row).GetFormattedString().Trim(); + var b = XlUxer.GCell(sheet, "B" + row).GetFormattedString().Trim(); + var c = XlUxer.GCell(sheet, "C" + row).GetFormattedString().Trim(); + var d = XlUxer.GCell(sheet, "D" + row).GetFormattedString().Trim(); + var f = XlUxer.GCell(sheet, "F" + row).GetFormattedString().Trim(); + + if (string.IsNullOrEmpty(b)) + { + kugyoCnt++; + if (kugyoCnt >= 10) break; + continue; + } + + int[] su = new int[31]; + for (var col = 8; col < 8 + 31; col++) + { + var strVal = XlUxer.GCell(sheet, row, col).GetFormattedString().Trim(); + if (string.IsNullOrEmpty(strVal)) continue; + + int intVal = int.TryParse(strVal, out var intV) ? intV : int.MinValue; + + aaaaaaa + + + } + } + + + } + + + + } + } + catch (Exception ex) + { + LoggerUxer.Error($"特殊処理(鋳造LPDC)にてエラーが発生しました。[{ex.Message}]"); + return false; + } + + return true; + } + + /// + /// 書式付きテキスト作成 + /// + /// + /// + /// + /// + private static List CreateFormattedTextAll( + Dictionary iniDic, + List cdList, + List outList) + { + const string INI_KEY_FORMATTED_TEXT_FORMAT_FILE = "FormattedTextFormatFile"; + + var ftff = DictionaryUxer.GetValueOrDefault(iniDic, INI_KEY_FORMATTED_TEXT_FORMAT_FILE, string.Empty); + if (string.IsNullOrEmpty(ftff)) + return new List() { $"[ERROR]INI未設定です。[キー:{INI_KEY_FORMATTED_TEXT_FORMAT_FILE}]" }; + + var patterns = ftff.Split('|'); + + List ftffList = new List(); + foreach (var pattern in patterns) + { + var items = pattern.Split(','); + + var dto = new FormattedTextPatternDto(); + + if (items.Length == 1) + { + dto.FileName = items[0].Trim(); + } + else if (items.Length == 3) + { + dto.ColumnName = items[0].Trim(); + dto.JudgeValue = items[1].Trim(); + dto.FileName = items[2].Trim(); + } + else + { + dto.Format = $"書式つきテキストパターン定義に不備があります。[キー:{INI_KEY_FORMATTED_TEXT_FORMAT_FILE},値:{pattern}]"; + } + if (!string.IsNullOrEmpty(dto.FileName)) + { + if (dto.FileName.IndexOf("\\") < 0) + dto.FileName = ".\\" + dto.FileName; + + if (!File.Exists(dto.FileName)) + { + dto.Format = $"書式ファイルがありません。[キー:{INI_KEY_FORMATTED_TEXT_FORMAT_FILE},ファイル名:{dto.FileName}]"; + } + else + { + try + { + using (var sr = new StreamReader(dto.FileName)) + { + dto.Format = sr.ReadToEnd(); + } + } + catch (Exception ex) + { + dto.Format = $"ファイルの読み込みに失敗しました。[パス:{dto.FileName},詳細:{ex.Message}]"; + } + } + } + ftffList.Add(dto); + } + List list = new List(); + + // 行 + foreach (var items in outList) + { + if (items.Length != cdList.Count) + { + list.Add($"列数が合いません。[列定義数:{cdList.Count},行データ:{string.Join(",",items)}]"); + continue; + } + var format = string.Empty; + foreach (var dto in ftffList) + { + if (string.IsNullOrEmpty(dto.ColumnName) || + string.IsNullOrEmpty(dto.JudgeValue)) + { + // その他:即時これを適用 + format = dto.Format; + break; + } + else + { + var cd = cdList.FirstOrDefault(m => m.LogicalName == dto.ColumnName); + if (cd is null) continue; + var index = cdList.IndexOf(cd); + switch(dto.JudgeValue) + { + case "@@@EMPTY@@@": + if (string.IsNullOrEmpty(items[index])) + { + format = dto.Format; + break; + } + break; + case "@@@NOT_EMPTY@@@": + if (!string.IsNullOrEmpty(items[index])) + { + format = dto.Format; + break; + } + break; + default: + if (items[index] == dto.JudgeValue) + { + format = dto.Format; + break; + } + break; + } + if (!string.IsNullOrEmpty(format)) break; + } + } + // 項目値で置換し出力レコードを作成 + var line = format; + for (var index2 = 0; index2 < items.Length; index2++) + { + line = line.Replace($"@@@{cdList[index2].LogicalName}@@@", items[index2]); + } + list.Add(line); + } + return list; + } + + /// + /// DTOでExcelColumnLetterAttribute属性がついたプロパティの辞書作成 + /// + /// 作成した辞書 + private static Dictionary CreateExcelColumnDtoPropDic() + { + // 属性付きのプロパティのみ抽出 + var list = typeof(WeOrderDto).GetProperties() + .Select(p => new + { + p.Name, + ExcelLetter = p.GetCustomAttribute()?.ColumnLetter + }) + .Where(p => p.ExcelLetter != null) + .ToList(); + + // 辞書化 + Dictionary dic = new Dictionary(); + foreach (var item in list) + { + dic.Add(item.Name, item.ExcelLetter); + } + return dic; + } + + private static bool TryCreateRetsuDic(Dictionary iniDic, out List cdList, out string resultMessage) + { + cdList = new List(); + resultMessage = string.Empty; + + for (var cnt = 0; cnt < 1000; cnt++) + { + var key = $"Col{cnt:d3}"; + + var iniValue = DictionaryUxer.GetValueOrDefault( + iniDic, key, string.Empty); + + if (string.IsNullOrEmpty(iniValue)) continue; + + var dto = ColumnDefinition.Parse(iniValue, out var messageForMe); + if (dto is null) + { + resultMessage = $"列定義に不備があります。[キー:{key},設定値:{iniValue},エラー詳細:{messageForMe}]"; + return false; + } + cdList.Add(dto); + } + return true; + } + + // INIキー定義 + private const string KEY_EXCEL_ITEM_NAME_AND_COLUMN_LETTER_MAPPING = "ExcelItemNameAndColumnLetterMapping"; + + /// + /// DTOアイテムの列レターマッピング辞書作成 + /// + /// INIDIC + /// [OUT]作成した辞書 + /// [OUT]結果メッセージ + /// 成否 + private bool TryCreateItemColumnMappingDic(DictionaryiniDic, out Dictionary dic, out string resultMessage) + { + resultMessage = string.Empty; + + // Excel列レター属性を有するDTOプロパティ名のリスト + dic = CreateExcelColumnDtoPropDic(); + LoggerUxer.Info($"[Excel列レター属性を有するアイテム名のリスト:{string.Join(",", dic.Keys)}]"); + LoggerUxer.Info($"[Excel列レター属性を有するアイテムの列レターのリスト:{string.Join(",", dic.Values)}]"); + + // INIの拡張定義を取得 + var str = DictionaryUxer.GetValueOrDefault( + iniDic, + KEY_EXCEL_ITEM_NAME_AND_COLUMN_LETTER_MAPPING, + string.Empty); + + // INIに拡張定義がないとき、デフォルトのみなので終了 + if (string.IsNullOrEmpty(str)) return true; + + var maps = str.Split('|'); + foreach (var map in maps) + { + var kvp = map.Split(':'); + if (kvp.Length != 2) + { + resultMessage = $"設定ファイルのアイテム-列レターマッピング指定で「アイテム名:列レター」書式が不正です。[キー:{KEY_EXCEL_ITEM_NAME_AND_COLUMN_LETTER_MAPPING},値:{str}]"; + LoggerUxer.Error(resultMessage); + return false; + } + + // アイテム名のバリデ + if (!dic.Keys.Contains(kvp[0])) + { + // エラー時(アイテム名誤りまたは指定アイテムにExcel列レター属性が無い) + resultMessage = $"設定ファイルのアイテム-列レターマッピング指定で「アイテム名」が対象のアイテム名に含まれません。[キー:{KEY_EXCEL_ITEM_NAME_AND_COLUMN_LETTER_MAPPING},値:{str},アイテム名:{kvp[0]}]"; + LoggerUxer.Error(resultMessage); + LoggerUxer.Info($"[有効なアイテム名:{string.Join(",", dic.Keys)}]"); + return false; + } + + //kvp[1] = kvp[1].ToUpper(); + + if (kvp[1].IndexOf(",") != -1) + { + // Excel列以外の指定(別のところから取得)の場合 + var strSplit = kvp[1].Split(','); + // 漁法名 + switch(strSplit[0]) + { + case "別シート": + if (strSplit.Length != 5) + { + resultMessage = $"設定ファイルのアイテム-列レターマッピング指定でCSV要素数が違います。[キー:{KEY_EXCEL_ITEM_NAME_AND_COLUMN_LETTER_MAPPING},漁法名:{strSplit[0]}]"; + LoggerUxer.Error(resultMessage); + return false; + } + if (!ExcelCellValidatorUxer.IsValidA1Format(strSplit[2] + "1")) + { + resultMessage = $"設定ファイルのアイテム-列レターマッピング指定で列レターが不正です。[キー:{KEY_EXCEL_ITEM_NAME_AND_COLUMN_LETTER_MAPPING},漁法名:{strSplit[0]},列レター:{strSplit[2]}]"; + LoggerUxer.Error(resultMessage); + return false; + } + if (!ExcelCellValidatorUxer.IsValidA1Format(strSplit[3] + "1")) + { + resultMessage = $"設定ファイルのアイテム-列レターマッピング指定で列レターが不正です。[キー:{KEY_EXCEL_ITEM_NAME_AND_COLUMN_LETTER_MAPPING},漁法名:{strSplit[0]},列レター:{strSplit[3]}]"; + LoggerUxer.Error(resultMessage); + return false; + } + if (!int.TryParse(strSplit[4], out var intVal) || intVal < 1) + { + resultMessage = $"設定ファイルのアイテム-列レターマッピング指定で開始行番号が不正です。[キー:{KEY_EXCEL_ITEM_NAME_AND_COLUMN_LETTER_MAPPING},漁法名:{strSplit[0]},開始行番号:{strSplit[4]}]"; + LoggerUxer.Error(resultMessage); + return false; + } + break; + default: + resultMessage = $"設定ファイルのアイテム-列レターマッピング指定で「漁法名」が未存在です。[キー:{KEY_EXCEL_ITEM_NAME_AND_COLUMN_LETTER_MAPPING},漁法名:{strSplit[0]}]"; + LoggerUxer.Error(resultMessage); + return false; + } + } + // Excel列レターのバリデ + else if (!XlUxer.TryConvertColLetterToNumber(kvp[1].ToUpper(), out var colNo)) + { + // バリデエラー + resultMessage = $"設定ファイルのアイテム-列レターマッピング指定で「列レター」書式が不正です。[キー:{KEY_EXCEL_ITEM_NAME_AND_COLUMN_LETTER_MAPPING},列レター値:{kvp[1]}]"; + LoggerUxer.Error(resultMessage); + return false; + } + + // 辞書を更新 + dic[kvp[0]] = kvp[1]; + } + return true; + } + + /// + /// 入力フォルダパスのチェック + /// + /// 入力フォルダパス + /// メッセージ + /// 成否 + private static bool CheckInFolder(string folderPath, out string resultMessage) + { + resultMessage = string.Empty; + if (string.IsNullOrEmpty(folderPath)) + { + resultMessage = $"設定ファイルに入力フォルダパスが設定されていません。"; + return false; + } + if (!Directory.Exists(folderPath)) + { + resultMessage = $"設定ファイルの入力フォルダパスのフォルダが存在しません。[入力フォルダパス:{folderPath}]"; + return false; + } + return true; + } + + // INIキー定義 + private const string KEY_EXCEL_INPUT_FILE_PATTERN_ONLY_NEWEST = "ExcelInputFilePatternOnlyNewest"; + + /// + /// 対象ファイル群(ファイル名パターン合致)のファイルパスリスト取得 + /// + /// INI辞書 + /// 入力フォルダパス + /// 入力ファイル名(パターン) + /// [出力]対象ファイル群 + /// [出力]メッセージ + /// 成否 + private static bool GetFiles( + Dictionary iniDic, + string inFolderPath, + string fileNamePattern, + out List files, + out string resultMessage) + { + resultMessage = string.Empty; + + // パターン一致ファイル群中、最新の1件のみか? + var newestOnly = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_INPUT_FILE_PATTERN_ONLY_NEWEST, string.Empty) == "1"; + + string[] paths = null; + + if (newestOnly) + { + // パターン一致ファイル群中の更新日時が最新のもの1つだけ + string latestFile = Directory.GetFiles(inFolderPath, fileNamePattern) + .OrderByDescending(f => File.GetLastWriteTime(f)) + .FirstOrDefault(); + if (string.IsNullOrEmpty(latestFile)) + { + // 該当なしの時、空配列 + paths = new string[0]; + } + else + { + // 該当ありの時、1個のみ + paths = new string[] { latestFile }; + } + } + else + { + paths = Directory.GetFiles(inFolderPath, fileNamePattern); + } + + files = paths.ToList(); + return true; + } + + /// + /// 1ファイル実行 + /// + /// Excelファイルパス + /// シートチェック項目リスト + /// INIディクショナリ + /// 開始日 + /// 0:OK、-1:NG + private static int RunOneFile( + string sectionName, + string path, + DateTime now, + List checkItems, + Dictionary iniDic, + DateTime fromDate, + List weOrderList) + { + // INIキー定義 + const string KEY_INCLUDED_SHEET_NAMES = "IncludedSheetNames"; + const string KEY_EXCLUDED_SHEET_NAMES = "ExcludedSheetNames"; + const string KEY_INCLUDED_LINE_NAMES = "IncludedLineNames"; + const string KEY_EXCLUDED_LINE_NAMES = "ExcludedLineNames"; + const string KEY_EXCEL_SKIP_SAME_MONTH_SHEETS = "ExcelSkipSameMonthSheets"; + + if (System.IO.Path.GetExtension(path).ToLower() != ".xlsx" && + System.IO.Path.GetExtension(path).ToLower() != ".xlsm") + { + LoggerUxer.Warn($"拡張子が異なるためスキップします。[{path}]"); + return (int)Common.RetCode.Success; + } + + LoggerUxer.Info($"[ファイル:{path}]"); + + try + { + using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read)) + using (var book = new XLWorkbook(fs)) + { + // 処理対象のシート名 + var incSheetsCsv = DictionaryUxer.GetValueOrDefault(iniDic, KEY_INCLUDED_SHEET_NAMES, string.Empty); + if (!string.IsNullOrEmpty(incSheetsCsv)) + { + LoggerUxer.Info($"[処理対象シート名:{incSheetsCsv}]"); + } + else + { + LoggerUxer.Info($"[処理対象シート名:なし]"); + } + + // 処理対象外のシート名 + var excSheetsCsv = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCLUDED_SHEET_NAMES, string.Empty); + if (!string.IsNullOrEmpty(excSheetsCsv)) + { + if (string.IsNullOrEmpty(incSheetsCsv)) + { + LoggerUxer.Info($"[処理対象外シート名:{excSheetsCsv}]"); + } + else + { + LoggerUxer.Warn($"処理対象シート名が指定されているため、処理対象外指定は無効になります。[キー:{KEY_EXCLUDED_SHEET_NAMES},値:{excSheetsCsv}]"); + } + } + else + { + LoggerUxer.Info($"[処理対象外シート名:なし]"); + } + // シートフィルタ作成 + var incSheets = string.IsNullOrEmpty(incSheetsCsv) ? new string[] { } : incSheetsCsv.Split(','); + var excSheets = string.IsNullOrEmpty(excSheetsCsv) ? new string[] { } : excSheetsCsv.Split(','); + var sheetFilter = new SheetFilterUxer(incSheets, excSheets); + + // 処理対象のライン名 + var incLinesCsv = DictionaryUxer.GetValueOrDefault(iniDic, KEY_INCLUDED_LINE_NAMES, string.Empty); + if (!string.IsNullOrEmpty(incLinesCsv)) + { + LoggerUxer.Info($"[処理対象ライン名:{incLinesCsv}]"); + } + else + { + LoggerUxer.Info($"[処理対象ライン名:なし]"); + } + + // 処理対象外のライン名 + var excLinesCsv = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCLUDED_LINE_NAMES, string.Empty); + if (!string.IsNullOrEmpty(excLinesCsv)) + { + if (string.IsNullOrEmpty(incLinesCsv)) + { + LoggerUxer.Info($"[処理対象外ライン名:{excLinesCsv}]"); + } + else + { + LoggerUxer.Warn($"処理対象ライン名が指定されているため、処理対象外指定は無効になります。[キー:{KEY_EXCLUDED_LINE_NAMES},値:{excLinesCsv}]"); + } + } + else + { + LoggerUxer.Info($"[処理対象外ライン名:なし]"); + } + // ラインフィルタ作成 + var incLines = string.IsNullOrEmpty(incLinesCsv) ? new string[] { } : incLinesCsv.Split(','); + for (int cnt = 0; cnt < incLines.Count(); cnt++) incLines[cnt] = incLines[cnt].Replace("@@@COMMA@@@", ","); + var excLines = string.IsNullOrEmpty(excLinesCsv) ? new string[] { } : excLinesCsv.Split(','); + for (int cnt = 0; cnt < excLines.Count(); cnt++) excLines[cnt] = excLines[cnt].Replace("@@@COMMA@@@", ","); + var lineFilter = new LineFilterUxer(incLines, excLines); + + // 同月シートスキップ + var skipSameMonthSheets = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_SKIP_SAME_MONTH_SHEETS, string.Empty); + if (string.IsNullOrEmpty(skipSameMonthSheets)) + { + LoggerUxer.Error($"設定ファイルの同月シートスキップ有無が未指定です。[キー:{KEY_EXCEL_SKIP_SAME_MONTH_SHEETS}]"); + return (int)Common.RetCode.ConfigError; + } + if (!bool.TryParse(skipSameMonthSheets.ToLower(),out var isSkipSameMonth)) + { + LoggerUxer.Error($"設定ファイルの同月シートスキップ有無が不正値です。[{KEY_EXCEL_SKIP_SAME_MONTH_SHEETS}:{skipSameMonthSheets}]"); + return (int)Common.RetCode.ConfigError; + } + LoggerUxer.Info($"[同月シートスキップ有無:{isSkipSameMonth.ToString().ToLower()}]"); + + // シートの年月保持 + var yyyymmList = new List(); + + // シート右端から左へループ + for (int sheetIndex = book.Worksheets.Count; sheetIndex >= 1; sheetIndex--) + { + // シート取得 + var sheet = book.Worksheet(sheetIndex); + + if (!sheetFilter.CanPass(sheet.Name.Trim())) + { + // シート名フィルタに引っかからなかった時、飛ばす + LoggerUxer.Info($"対象外のシートをスキップします。[シート名:{sheet.Name}]"); + continue; + } + + // 条件を満たさないシートは飛ばす + if (CheckExcelSheet(sheet, checkItems) == false) + { + LoggerUxer.Info($"シート条件を満たさないためスキップします。[シート名:{sheet.Name}]"); + continue; + } + + LoggerUxer.Info($"[シート名:{sheet.Name}]"); + + // ライン(先頭のみ)情報取得 + if (!TryCreateLineInfoList(sheet, iniDic, lineFilter, out var lineInfoList, true)) + { + return (int)Common.RetCode.ExcelLinesInfoGetError; + } + + var lineNames = lineInfoList.Select(x => x.LineName).Distinct(); + if (!lineFilter.HasAnyPass(lineNames)) + { + LoggerUxer.Info($"シート内に対象のラインがないためスキップします。"); + continue; + } + + // 日付情報取得 + if (!GetDateList(sheet, fromDate, null, iniDic, out var dateDic)) + { + return (int)Common.RetCode.ExcelDateCellGetError; + } + + if (isSkipSameMonth) + { + var yyyymm = dateDic.Values.Max().ToString("yyyyMM"); + if (yyyymmList.Contains(yyyymm)) + { + LoggerUxer.Info($"シートの年月が既に処理済みのため、このシートをスキップします。[シート名:{sheet.Name.Trim()},年月:{yyyymm.Substring(0, 4) + "年" + yyyymm.Substring(4, 2) + "月"}]"); + continue; + } + yyyymmList.Add(yyyymm); + } + + // 最大日が開始日より小さい場合、シートを飛ばす + if (dateDic.Values.Max() < fromDate) + { + LoggerUxer.Info($"シート最大日が開始日より前のためスキップします。[シート最大日:{(DateTime)(dateDic.Values.Max()):yyyy/MM/dd}]"); + continue; + } + + // ライン繰り返し + foreach (var line in lineInfoList) + { + // データ取得 + if (!GetData(sheet, line, now, dateDic, fromDate, iniDic, weOrderList)) + { + return (int)Common.RetCode.ExcelDataGetError; + } + } + } + } + } + catch (Exception ex) + { + LoggerUxer.Error($"1ファイル処理にてエラーが発生しました。[{ex.Message}]"); + return (int)Common.RetCode.ExcelOneFileException; + } + return (int)Common.RetCode.Success; + } + + /// + /// Excel対象シートチェック項目をINIファイルより取得 + /// + /// INIのチェック項目文字列 + /// チェック項目のリスト + private static bool TryGetExcelSheetCheckItemsFromIni(string checkItems, out List resultList) + { + resultList = new List(); + + if (string.IsNullOrEmpty(checkItems)) return true; + + var items = checkItems.Split('|'); + + foreach (var item in items) + { + var strs = item.Split(','); + if (strs.Length != 2) + { + LoggerUxer.Error($"Excel対象シートチェック項目にカンマの数が不正な箇所がありました。[全条件文字列:{checkItems},カンマ数:{strs.Length}]"); + return false; + } + + // A1形式セルアドレス(複数あり) + var a1AddressList = strs[0] + .Split(new string[] { ExcelSheetCheckDto.OR_DELIMITER }, StringSplitOptions.None) + .ToList(); + for (var cnt = 0; cnt < a1AddressList.Count; cnt++) + { + if (!XlUxer.TryValidateA1CellAddress(a1AddressList[cnt], out var resultAddress)) + { + LoggerUxer.Error($"A1形式アドレス値が不正です。[アドレス値:{a1AddressList[cnt]},チェック項目文字列:{checkItems}]"); + return false; + } + a1AddressList[cnt] = resultAddress; + } + + // チェック値(複数あり) + var checkValuesList = strs[1] + .Split(new string[] { ExcelSheetCheckDto.OR_DELIMITER }, StringSplitOptions.None) + .ToList(); + + resultList.Add(new ExcelSheetCheckDto() + { + a1AddressList = a1AddressList, + CheckValueList = checkValuesList, + }); + } + return true; + } + + /// + /// Excelの対象シートチェック + /// + /// シート + /// チェック項目リスト + /// true:OK、false:NG + private static bool CheckExcelSheet(IXLWorksheet sheet, List checkItems) + { + // チェック項目(複数)が全てOKであること + foreach (var item in checkItems) + { + // セル(複数)とチェック値(複数)の組み合わせで1つでも一致すればOK + var isMatch = false; + foreach (var a1 in item.a1AddressList) + { + for (var cnt = 0; cnt < item.CheckValueList.Count; cnt++) + { + if (!KanaConvertUxer.TryConvertHankakuToZenkaku(item.CheckValueList[cnt], out var resultForMe, out var messageForMe)) + { + LoggerUxer.Error(messageForMe); + return false; + } + var checkValue = resultForMe; + + if (!KanaConvertUxer.TryConvertHankakuToZenkaku(XlUxer.GCell(sheet, a1).GetFormattedString(), out resultForMe, out messageForMe)) + { + LoggerUxer.Error(messageForMe); + return false; + } + var cellValue = resultForMe; + + if (StringUxer.WildcardMatch(cellValue, checkValue)) + { + isMatch = true; + break; + } + } + if (isMatch) break; + } + if (!isMatch) + { + return false; + } + } + return true; + } + + /// + /// 日付情報取得 + /// + /// シート + /// INIDIC + /// 日付辞書(キーは列番号) + /// 成否 + private static bool GetDateList( + IXLWorksheet sheet, + DateTime fromDate, + DateTime? toDate, + Dictionary iniDic, + out Dictionary dateDic) + { + // INIキー定義 + const string KEY_EXCEL_DATE_ROW_MODE = "ExcelDateRowMode"; + const string EXCEL_DATE_ROW_MODE_FIXED = "Fixed"; + const string EXCEL_DATE_ROW_MODE_JUDGE = "Judge"; + const string EXCEL_DATE_ROW_MODE_NONE = "None"; + const string KEY_EXCEL_DATE_ROW = "ExcelDateRow"; + const string KEY_EXCEL_DATE_ROW_JUDGE_COL = "ExcelDateRowJudgeCol"; + const string KEY_EXCEL_DATE_ROW_JUDGE_VALUE = "ExcelDateRowJudgeValue"; + const string KEY_EXCEL_DATE_ROW_START_COL = "ExcelDateRowStartCol"; + const string KEY_EXCEL_DATE_ROW_END_VALUE = "ExcelDateRowEndValue"; + const string KEY_EXCEL_DATE_YM_GET_MODE = "ExcelDateYMGetMode"; + const string KEY_EXCEL_NEN_GETSU_CELL_ADDRESS = "ExcelNenGetsuCellAddress"; + const string KEY_EXCEL_DATE_YEAR_CELL = "ExcelDateYearCell"; + const string KEY_EXCEL_DATE_MONTH_CELL = "ExcelDateMonthCell"; + + dateDic = new Dictionary(); + var dayDic = new Dictionary(); + + DateTime? dateNenGetsu = null; + + var strExcelDateRowMode = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_DATE_ROW_MODE, string.Empty); + if (string.IsNullOrEmpty(strExcelDateRowMode)) + { + LoggerUxer.Error($"設定ファイルのExcel日付行指定モードが未設定です。[キー:{KEY_EXCEL_DATE_ROW_MODE}]"); + return false; + } + if (strExcelDateRowMode.ToLower() != EXCEL_DATE_ROW_MODE_FIXED.ToLower() && + strExcelDateRowMode.ToLower() != EXCEL_DATE_ROW_MODE_JUDGE.ToLower() && + strExcelDateRowMode.ToLower() != EXCEL_DATE_ROW_MODE_NONE.ToLower()) + { + LoggerUxer.Error($"設定ファイルのExcel日付行指定モードが不正値です。[{KEY_EXCEL_DATE_ROW_MODE}:{strExcelDateRowMode}]"); + return false; + } + + var excelDateRow = int.MinValue; + + if (strExcelDateRowMode.ToLower() == EXCEL_DATE_ROW_MODE_FIXED.ToLower()) + { + // 日付行指定モードが固定値の場合 + var str = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_DATE_ROW, string.Empty); + if (string.IsNullOrEmpty(str)) + { + LoggerUxer.Error($"設定ファイルのExcel日付行番号が未設定です。[キー:{KEY_EXCEL_DATE_ROW}]"); + return false; + } + if (int.TryParse(str, out excelDateRow) == false || excelDateRow <= 0) + { + LoggerUxer.Error($"設定ファイルのExcel日付行番号が不正値です。[{KEY_EXCEL_DATE_ROW}:{str}]"); + return false; + } + LoggerUxer.Info($"[日付行番号(設定ファイル値):{excelDateRow}]"); + } + else if (strExcelDateRowMode.ToLower() == EXCEL_DATE_ROW_MODE_JUDGE.ToLower()) + { + // 日付行指定モードが判定の場合 + + // 日付行判定列 + var strJudgeCol = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_DATE_ROW_JUDGE_COL, string.Empty); + if (string.IsNullOrEmpty(strJudgeCol)) + { + LoggerUxer.Error($"設定ファイルのExcel日付行判定列が未設定です。[キー:{KEY_EXCEL_DATE_ROW_JUDGE_COL}]"); + return false; + } + if (!XlUxer.TryConvertColLetterToNumber(strJudgeCol, out var colNo)) + { + LoggerUxer.Error($"設定ファイルのExcel日付行判定列が不正値です。[{KEY_EXCEL_DATE_ROW_JUDGE_COL}:{strJudgeCol}]"); + return false; + } + LoggerUxer.Info($"[日付行判定列:{strJudgeCol}(番号:{colNo})]"); + + // 日付行判定値 + var strJudgeValue = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_DATE_ROW_JUDGE_VALUE, string.Empty); + + // 日付行の検索 + for (int row = 1; row <= 1000; row++) + { + var cellValue = sheet.Cell(row, colNo).GetFormattedString(); + if (cellValue == strJudgeValue) + { + // 日付行検出 + excelDateRow = row; + break; + } + } + if (excelDateRow == int.MinValue) + { + LoggerUxer.Error($"設定ファイルのExcel日付行判定が失敗しました。[{KEY_EXCEL_DATE_ROW_JUDGE_COL}:{strJudgeCol},{KEY_EXCEL_DATE_ROW_JUDGE_VALUE}:{strJudgeValue}]"); + return false; + } + LoggerUxer.Info($"[日付行番号(判定結果):{excelDateRow}]"); + } + else if (strExcelDateRowMode.ToLower() == EXCEL_DATE_ROW_MODE_NONE.ToLower()) + { + // 日付行指定モードがなしの場合 + LoggerUxer.Info($"日付行なし[{KEY_EXCEL_DATE_ROW_MODE}:{strExcelDateRowMode}]"); + return true; + } + else + { + LoggerUxer.Error($"設定ファイルのExcel日付行指定モードの扱いに失敗しました。[{KEY_EXCEL_DATE_ROW_MODE}:{strExcelDateRowMode}]"); + return false; + } + + if (sheet.Row(excelDateRow).IsHidden) + { + LoggerUxer.Error($"設定ファイルのExcel日付行番号が非表示行です。[日付行番号:{excelDateRow}]"); + return false; + } + + // 年と月の取得モード + var strYMGetMode = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_DATE_YM_GET_MODE, string.Empty); + if (string.IsNullOrEmpty(strYMGetMode)) + { + LoggerUxer.Error($"設定ファイルのExcel年/月取得モードが未設定です。[キー:{KEY_EXCEL_DATE_YM_GET_MODE}]"); + return false; + } + // enum値変換 + ENUM_EXCEL_DATE_YM_GET_MODE ymGetMode = GetExcelDateYMGetModeFromIniValue(strYMGetMode); + if (ymGetMode == ENUM_EXCEL_DATE_YM_GET_MODE.None) + { + LoggerUxer.Error($"設定ファイルのExcel年/月取得モードが不正値です。[{KEY_EXCEL_DATE_YM_GET_MODE}:{strYMGetMode}]"); + return false; + } + + if (ymGetMode == ENUM_EXCEL_DATE_YM_GET_MODE.FromTargetCellDate) + { + // 特定セル値から取得する場合、ここで取得しておく + var strAddress = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_NEN_GETSU_CELL_ADDRESS, string.Empty); + if (string.IsNullOrEmpty(strAddress)) + { + LoggerUxer.Error($"設定ファイルのExcel年月セルアドレスが未設定です。[キー名:{KEY_EXCEL_NEN_GETSU_CELL_ADDRESS}]"); + return false; + } + if (!ExcelCellValidatorUxer.IsValidA1Format(strAddress)) + { + LoggerUxer.Error($"設定ファイルのExcel年月セルアドレスが不正値です。[{KEY_EXCEL_NEN_GETSU_CELL_ADDRESS}:{strAddress}]"); + return false; + } + var cellText = sheet.Cell(strAddress).GetFormattedString().Trim(); + if (!TryGetYmFromText(cellText, out dateNenGetsu)) + { + LoggerUxer.Error($"設定ファイルのExcel年月セルアドレス値に年月が含まれません。[{KEY_EXCEL_NEN_GETSU_CELL_ADDRESS}:{strAddress}]"); + return false; + } + } + + int intYYYY = int.MinValue; + int intMM = int.MinValue; + if (ymGetMode == ENUM_EXCEL_DATE_YM_GET_MODE.FromYMCells) + { + // 年月を年月セルから取得する場合 + + // 年セル + var str = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_DATE_YEAR_CELL, string.Empty); + if (string.IsNullOrEmpty(str)) + { + LoggerUxer.Error($"設定ファイルのExcel年セルが未設定です。[キー:{KEY_EXCEL_DATE_YEAR_CELL}]"); + return false; + } + var str2 = str.Trim().ToUpper(); + if (!ExcelCellValidatorUxer.IsValidA1Format(str2)) + { + LoggerUxer.Error($"設定ファイルのExcel年セルがA1形式として不正値です。[{KEY_EXCEL_DATE_YEAR_CELL}:{str}]"); + return false; + } + + // 見たままのテキスト値を取得 + // 空チェック + str = sheet.Cell(str2).GetFormattedString().Trim(); + if (string.IsNullOrEmpty(str)) + { + LoggerUxer.Error($"年セルが未設定です。[セルアドレス:{str2}]"); + return false; + } + // 数値と範囲チェック + if (int.TryParse(str, out var intYear) == false) + { + LoggerUxer.Error($"年セルが非数値です。[セルアドレス:{str2},セル値:{str}]"); + return false; + } + if (intYear < 0) + { + // エラー + } + else if (intYear <= 99) + { + // 年2桁を4桁化 + intYYYY = 2000 + intYear; + } + else if(intYear < 2000) + { + // エラー + } + else if(intYear < 3000) + { + // 年4桁はそのまま + intYYYY = intYear; + } + else + { + // エラー + } + if (intYYYY == int.MinValue) + { + LoggerUxer.Error($"年セルが範囲外です。[セルアドレス:{str2},セル値:{intYear}]"); + return false; + } + LoggerUxer.Info($"[シートの年:{intYYYY}]"); + + // 月セル + str = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_DATE_MONTH_CELL, string.Empty); + if (string.IsNullOrEmpty(str)) + { + LoggerUxer.Error($"設定ファイルのExcel月セルが未設定です。[キー:{KEY_EXCEL_DATE_MONTH_CELL}]"); + return false; + } + str2 = str.Trim().ToUpper(); + if (!ExcelCellValidatorUxer.IsValidA1Format(str2)) + { + LoggerUxer.Error($"設定ファイルのExcel月セルがA1形式として不正値です。[{KEY_EXCEL_DATE_MONTH_CELL}:{str}]"); + return false; + } + + // 見たままのテキスト値を取得 + // 空チェック + str = sheet.Cell(str2).GetFormattedString().Trim(); + if (string.IsNullOrEmpty(str)) + { + LoggerUxer.Error($"月セルが未設定です。[セルアドレス:{str2}]"); + return false; + } + // 数値と範囲チェック + if (int.TryParse(str, out var intMonth) == false) + { + LoggerUxer.Error($"月セルが非数値です。[セルアドレス:{str2},セル値:{str}]"); + return false; + } + if (intMonth < 1) + { + // エラー + } + else if (intMonth <= 12) + { + // OK + intMM = intMonth; + } + else + { + // エラー + } + if (intMM == int.MinValue) + { + LoggerUxer.Error($"月セルが範囲外です。[セルアドレス:{str2},セル値:{intMonth}]"); + return false; + } + LoggerUxer.Info($"[シートの月:{intMM}]"); + } + + if (ymGetMode == ENUM_EXCEL_DATE_YM_GET_MODE.FromSheetName) + { + // シート名から取得 + var sheetName = sheet.Name.Trim(); + if (!GetYMFrom2Numerics(sheetName, out intYYYY, out intMM, out var messageForMe)) + { + LoggerUxer.Error($"シート名から年月を取得できませんでした。[シート名:{sheetName}, 詳細:{messageForMe}]"); + return false; + } + } + + var strExcelDateStartCol = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_DATE_ROW_START_COL, string.Empty); + + //if (int.TryParse(strExcelDateStartCol, out var excelDateStartCol) == false || excelDateStartCol < 0) + if (!XlUxer.TryConvertColLetterToNumber(strExcelDateStartCol, out int excelDateStartCol)) + { + LoggerUxer.Error($"設定ファイルのExcel日付開始列が不正です。[{KEY_EXCEL_DATE_ROW_START_COL}:{strExcelDateStartCol}]"); + return false; + } + LoggerUxer.Info($"[日付開始列:{strExcelDateStartCol}(番号:{excelDateStartCol})]"); + + var strExcelDateRowEndValue = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_DATE_ROW_END_VALUE, string.Empty); + + // 日付開始セルから繰り返す + for (int col = excelDateStartCol; ; col++) + { + if (col > 1000) + { + // 終了値が見つからない + LoggerUxer.Error($"日付行で終了値が見つかりません。[日付行:{excelDateRow},日付行開始列:{strExcelDateStartCol},日付終了値:{strExcelDateRowEndValue}]"); + return false; + } + + // 非表示列は飛ばす + if (sheet.Column(col).IsHidden) continue; + + // 日付列終了 + if (sheet.Cell(excelDateRow, col).GetFormattedString() == strExcelDateRowEndValue) break; + + DateTime date = DateTime.MinValue; + + if (dateNenGetsu != null) + { + var dt = (DateTime)dateNenGetsu; + var text = sheet.Cell(excelDateRow, col).GetFormattedString().Trim(); + if (!int.TryParse(text,out var intVal)) + { + // 数値でないとき飛ばす + continue; + } + date = new DateTime(dt.Year, dt.Month, intVal); + // ディクショナリに追加 + dateDic.Add(col, date); + } + else if (ymGetMode == ENUM_EXCEL_DATE_YM_GET_MODE.FromDateCell) + { + // 年月を日付値から取得する場合 + + if (sheet.Cell(excelDateRow, col).TryGetValue(out var d) && + d.Year >= 2000) + { + // 日付型で取得できたらそのままリストに追加 + date = d; + } + else if (int.TryParse(sheet.Cell(excelDateRow, col).GetFormattedString(), out var intValue) && + intValue >= 1 && intValue <= 31) + { + // 日のみ数値で格納されている + + if (dateDic.Count == 0) + { + // 最初のセルが日付でない場合飛ばす + LoggerUxer.Warn($"日付行の開始セルが日付ではありません。[日付行:{excelDateRow},列:{col},値:{sheet.Cell(excelDateRow, col).GetFormattedString()}]"); + continue; + } + // 直前の日付の年と月を使用して日付を作る + date = new DateTime( + dateDic[dateDic.Keys.Max()].Year, + dateDic[dateDic.Keys.Max()].Month, + intValue); + } + else if (sheet.Cell(excelDateRow, col).TryGetValue(out d)) + { + // 日付型で年が2000未満のとき、 + if (dateDic.Count > 0 && d.Month == dateDic[dateDic.Max(m => m.Key)].Month) + { + d = new DateTime( + dateDic[dateDic.Max(m => m.Key)].Year, + d.Month, + d.Day); + } + else if (dateDic.Count > 0) + { + d = new DateTime( + dateDic[dateDic.Max(m => m.Key)].Month == 12 ? + dateDic[dateDic.Max(m => m.Key)].Year + 1 : + dateDic[dateDic.Max(m => m.Key)].Year, + d.Month, + d.Day); + } + else + { + LoggerUxer.Warn($"日付セルの年が不明です。[日付行:{excelDateRow},列:{col}]"); + continue; + } + date = d; + } + else + { + // 日付でも数値でも無い場合、飛ばす + LoggerUxer.Warn($"日付セルが日付または数値ではありません。[日付行:{excelDateRow},列:{col}]"); + continue; + } + if (dateDic.Count > 0 && date <= dateDic.Values.Max(m => m)) + { + // 前の日付より昔の日付の場合、飛ばす + LoggerUxer.Warn($"日付行のセルの日付が重複または逆転しています。[日付行:{excelDateRow},列:{col},値:{sheet.Cell(excelDateRow, col).GetFormattedString()}]"); + continue; + } + if (toDate != null && (date < fromDate || date > (DateTime)toDate)) + { + // 終了日指定ありで、開始から終了の範囲外のとき、飛ばす + continue; + } + + // ディクショナリに追加 + dateDic.Add(col, date); + } + else if (ymGetMode == ENUM_EXCEL_DATE_YM_GET_MODE.FromYMCells) + { + // 年月を年月セルから取得する場合 + + // 表示されているままの文字列(通常日のみ)を取得 + var str = sheet.Cell(excelDateRow, col).GetFormattedString().Trim(); + + if (string.IsNullOrEmpty(str) || int.TryParse(str, out var day) == false || day < 1) + { + // 空または数値でない、またはマイナス値の場合、飛ばす + LoggerUxer.Warn($"日付セルが数値ではありません。[日付行:{excelDateRow},列:{ExcelColumnHelperUxer.GetExcelColumnLetter(col)}(番号:{col}),値:{str}]"); + continue; + } + + // 日のみDicに追加 + dayDic.Add(col, day); + } + else if (ymGetMode == ENUM_EXCEL_DATE_YM_GET_MODE.FromSheetName) + { + // 年月をシート名から取得する場合 + + // 表示されているままの文字列(通常日のみ)を取得 + var str = sheet.Cell(excelDateRow, col).GetFormattedString().Trim(); + + if (string.IsNullOrEmpty(str) || int.TryParse(str, out var day) == false || day < 1) + { + // 空または数値でない、またはマイナス値の場合、飛ばす + LoggerUxer.Warn($"日付セルが数値ではありません。[日付行:{excelDateRow},列:{ExcelColumnHelperUxer.GetExcelColumnLetter(col)}(番号:{col}),値:{str}]"); + continue; + } + + // 日のみDicに追加 + dayDic.Add(col, day); + } + else + { + LoggerUxer.Error($"設定ファイルのExcel年/月取得モードが不正値です。[{KEY_EXCEL_DATE_YM_GET_MODE}:{strYMGetMode}]"); + return false; + } + } + if ((ymGetMode == ENUM_EXCEL_DATE_YM_GET_MODE.FromDateCell && dateDic.Count == 0) || + (ymGetMode == ENUM_EXCEL_DATE_YM_GET_MODE.FromYMCells && dayDic.Count == 0)) + { + // 日付なし + LoggerUxer.Error($"Excelの日付行情報が取得できませんでした。[日付行:{excelDateRow},日付開始列:{strExcelDateStartCol},日付終了値:{strExcelDateRowEndValue}]"); + return false; + } + + if (ymGetMode == ENUM_EXCEL_DATE_YM_GET_MODE.FromYMCells || + ymGetMode == ENUM_EXCEL_DATE_YM_GET_MODE.FromSheetName) + { + int maeDay = int.MinValue; + bool isTochuDown = false; + foreach (var col in dayDic.Keys) + { + if (dayDic[col] < maeDay) + { + isTochuDown = true; + break; + } + maeDay = dayDic[col]; + } + if (isTochuDown) + { + // 二月跨っている + var maeYear = intMM == 1 ? intYYYY - 1 : intYYYY; + var maeMonth = intMM == 1 ? 12 : intMM - 1; + var isMae = true; + dateDic.Clear(); + maeDay = int.MinValue; + foreach (var col in dayDic.Keys) + { + if (isMae && (dayDic[col] < maeDay)) + { + isMae = false; + } + if (isMae) + dateDic.Add(col, new DateTime(maeYear, maeMonth, dayDic[col])); + else + dateDic.Add(col, new DateTime(intYYYY, intMM, dayDic[col])); + maeDay = dayDic[col]; + } + } + else + { + // 1月のみ + dateDic.Clear(); + foreach (var col in dayDic.Keys) + { + dateDic.Add(col, new DateTime(intYYYY, intMM, dayDic[col])); + } + } + } + + // 年月補正 + UpdateYearMonth(dateDic); + + // シート名から年補正 + if (StringUxer.TryExtractYearFromString(sheet.Name, out var yearFromSheetName)) + { + var oldYear = dateDic[dateDic.Max(m => m.Key)].Year; + var sa = yearFromSheetName - oldYear; + if (sa != 0) + { + var keys = dateDic.Keys.ToList(); + foreach (var key in keys) + { + dateDic[key] = new DateTime( + dateDic[key].Year + sa, + dateDic[key].Month, + dateDic[key].Day); + } + LoggerUxer.Info($"シート名より日付の年を補正しました。[補正前:{oldYear},補正後:{yearFromSheetName}]"); + } + } + + LoggerUxer.Info($"[日付:{GetDatesString(dateDic)}]"); + return true; + } + + /// + /// 文字列から年月を取得 + /// + /// + /// + /// + /// + /// + private static bool GetYMFrom2Numerics( + string inputText, + out int year, + out int month, + out string resultMessage) + { + year = -1; + month = -1; + resultMessage = string.Empty; + + // 1. 数字の塊を抽出 + MatchCollection matches = Regex.Matches(inputText, @"\d+"); + if (matches.Count < 2) + { + resultMessage = "数字が2つ以上含まれていません。"; + return false; + } + + // 先頭の2つを取得 + string rawYearOrTerm = matches[0].Value; + string rawMonth = matches[1].Value; + + // 数値に変換 + int yearOrTerm = int.Parse(rawYearOrTerm); + month = int.Parse(rawMonth); + + // 2. 2個目の数字(月)のチェック + if (month < 1 || month > 12) + { + resultMessage = $"月の値({month})が1~12の範囲外です。"; + return false; + } + + bool isTerm = false; + + // 3. 1個目の数字(年・期)の変換 + if (rawYearOrTerm.Length == 4) + { + year = yearOrTerm; // 4桁はそのまま西暦 + } + else if (rawYearOrTerm.Length == 2) + { + year = yearOrTerm + 2000; // 2桁は2000を足す + } + else if (rawYearOrTerm.Length == 3) // ★将来「99期」などがあるなら「期フラグ」を紐付けるのが安全です + { + year = yearOrTerm + 1923; // 3桁は期(1923を足す) + isTerm = true; + } + else + { + resultMessage = $"1つ目の数字({rawYearOrTerm})の桁数が不正です。"; + return false; + } + + // 4. 期のときの年度補正(1~3月のときは西暦に1足す) + if (isTerm && (month >= 1 && month <= 3)) + { + year += 1; + } + + // 念のため + if (year > DateTime.Today.Year + 1) + { + resultMessage = $"年({year})が不正です。"; + return false; + } + return true; + } + + /// + /// INI値から日付並び年月取得モードenum値を取得 + /// + /// INI値(文字列) + /// enum値(該当なしはNone) + private static ENUM_EXCEL_DATE_YM_GET_MODE GetExcelDateYMGetModeFromIniValue(string iniValue) + { + ENUM_EXCEL_DATE_YM_GET_MODE ret = ENUM_EXCEL_DATE_YM_GET_MODE.None; + if (iniValue.ToLower() == KEY_EXCEL_DATE_YM_GET_MODE_FROM_YM_CELLS.ToLower()) + { + ret = ENUM_EXCEL_DATE_YM_GET_MODE.FromYMCells; + } + else if (iniValue.ToLower() == KEY_EXCEL_DATE_YM_GET_MODE_FROM_DATE_CELL.ToLower()) + { + ret = ENUM_EXCEL_DATE_YM_GET_MODE.FromDateCell; + } + else if (iniValue.ToLower() == KEY_EXCEL_DATE_YM_GET_MODE_FROM_TARGET_CELL_DATE.ToLower()) + { + ret = ENUM_EXCEL_DATE_YM_GET_MODE.FromTargetCellDate; + } + else if (iniValue.ToLower() == KEY_EXCEL_DATE_YM_GET_MODE_FROM_SHEET_NAME.ToLower()) + { + ret = ENUM_EXCEL_DATE_YM_GET_MODE.FromSheetName; + } + return ret; + } + + private static void UpdateYearMonth(Dictionary dicDate) + { + // 更新前の日付文字列 + string before = GetDatesString(dicDate); + + // 年月(yyyyMM)でグループ化 + var ymGroups = dicDate.Values + .Select(dt => dt.Date) + .GroupBy(dt => dt.Year * 100 + dt.Month) + .OrderBy(g => g.Key) + .ToList(); + + if (ymGroups.Count == 2) + { + var firstYm = ymGroups[0].Key; + var secondYm = ymGroups[1].Key; + + // secondYmの1月前を計算 + var expectedYm = (secondYm % 100 == 1) + ? (secondYm / 100 - 1) * 100 + 12 + : secondYm - 1; + + if (firstYm != expectedYm) + { + // 更新対象の年月 + var newDate = new DateTime(expectedYm / 100, expectedYm % 100, 1); + + foreach (var key in dicDate.Keys.ToList()) + { + var dt = dicDate[key]; + if (dt.Year * 100 + dt.Month == firstYm) + { + // 日付はそのまま、年月だけ更新 + dicDate[key] = new DateTime(newDate.Year, newDate.Month, dt.Day); + } + } + LoggerUxer.Info($"前の年月を {expectedYm} に補正[補正前:{before}][補正後:{GetDatesString(dicDate)}]"); + } + } + } + + private static string GetDatesString(Dictionary dic) + { + string str = string.Empty; + int maeYyyy = -1; + int maeMm = -1; + foreach (var day in dic.Values.OrderBy(m => m)) + { + if (string.IsNullOrEmpty(str)) + { + str = day.ToString("yyyy/M/d"); + maeYyyy = day.Year; + maeMm = day.Month; + continue; + } + str += ","; + if (day.Year==maeYyyy&&day.Month==maeMm) + { + str += day.Day.ToString(); + } + else if(day.Year == maeYyyy) + { + str += day.Month.ToString()+"/" +day.Day.ToString(); + } + else + { + str += day.ToString("yyyy/M/d"); + } + maeYyyy = day.Year; + maeMm = day.Month; + } + return str; + } + + // ライン(複数)情報取得 + private static bool TryCreateLineInfoList( + IXLWorksheet sheet, + Dictionary iniDic, + LineFilterUxer lineFilter, + out List lineInfoList, + bool isTopOnly = false) + { + const string KEY_NAME_TO_ID_LIST_FOR_LINE = "NameToIdListForLine"; + const string KEY_EXCEL_LINE_JUDGE_COL = "ExcelLineJudgeCol"; + //const string LINE_LABEL = "ライン"; + const string KEY_EXCEL_LINE_JUDGE_VALUE = "ExcelLineJudgeValue"; + const string KEY_EXCEL_DATA_START_ROW_JUDGE_COL = "ExcelDataStartRowJudgeCol"; + const string KEY_EXCEL_DATA_START_ROW_JUDGE_VALUES = "ExcelDataStartRowJudgeValues"; + const string KEY_EXCEL_LINES_ON_SHEET = "ExcelLinesOnSheet"; + + // データ開始行判定値 + List dataStartRowJudgeValues = new List(); + + lineInfoList = new List(); + + // 1シートに複数ラインあり + var linesInSheet = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_LINES_ON_SHEET, string.Empty) == "1"; + LoggerUxer.Info($"[シート内に複数ライン:{linesInSheet}]"); + isTopOnly = !linesInSheet; + + // ライン判定値 + var lineJudgeValue = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_LINE_JUDGE_VALUE, string.Empty); + if (string.IsNullOrEmpty(lineJudgeValue)) + { + LoggerUxer.Error($"設定ファイルにライン判定値が設定されていません。[キー:{KEY_EXCEL_LINE_JUDGE_VALUE}]"); + return false; + } + LoggerUxer.Info($"[ライン判定値:{lineJudgeValue}]"); + + // ライン名→ID変換辞書 + if (!DictionaryUxer.CreateNameToIdDic( + DictionaryUxer.GetValueOrDefault(iniDic, KEY_NAME_TO_ID_LIST_FOR_LINE, string.Empty), + out var dicLine, out var myMessage)) + { + LoggerUxer.Error($"ライン名→ID変換辞書の作成に失敗しました。[キー:{KEY_NAME_TO_ID_LIST_FOR_LINE},エラー内容:{myMessage}]"); + return false; + } + + var str = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_LINE_JUDGE_COL, string.Empty); + if (string.IsNullOrEmpty(str)) + { + LoggerUxer.Error($"設定ファイルにライン判定列が設定されていません。[キー:{KEY_EXCEL_LINE_JUDGE_COL}]"); + return false; + } + //if (!int.TryParse(str, out var lineJudgeCol) || lineJudgeCol < 1) + if (!XlUxer.TryConvertColLetterToNumber(str, out var lineJudgeCol)) + { + LoggerUxer.Error($"設定ファイルのライン判定列が不正です。[キー:{KEY_EXCEL_LINE_JUDGE_COL},値:{str}]"); + return false; + } + LoggerUxer.Info($"[ライン判定列:{str}(番号:{lineJudgeCol})]"); + + str = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_DATA_START_ROW_JUDGE_COL, string.Empty); + if (string.IsNullOrEmpty(str)) + { + LoggerUxer.Error($"設定ファイルにデータ開始行判定列が設定されていません。[キー:{KEY_EXCEL_DATA_START_ROW_JUDGE_COL}]"); + return false; + } + //if (!int.TryParse(str, out var dataStartRowJudgeCol) || dataStartRowJudgeCol < 1) + if (!XlUxer.TryConvertColLetterToNumber(str, out var dataStartRowJudgeCol)) + { + LoggerUxer.Error($"設定ファイルのデータ開始行判定列が不正です。[キー:{KEY_EXCEL_DATA_START_ROW_JUDGE_COL},値:{str}]"); + return false; + } + LoggerUxer.Info($"[データ開始行判定列:{str}(番号:{dataStartRowJudgeCol})]"); + + // データ開始行判定値 + str = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_DATA_START_ROW_JUDGE_VALUES, string.Empty); + if (string.IsNullOrEmpty(str)) + { + LoggerUxer.Error($"設定ファイルにデータ開始行判定値が設定されていません。[キー:{KEY_EXCEL_DATA_START_ROW_JUDGE_VALUES}]"); + return false; + } + dataStartRowJudgeValues = str.Split(',').ToList(); + LoggerUxer.Info($"[データ開始行判定値:{string.Join(",",dataStartRowJudgeValues.ToArray())}]"); + + // 1000行まで走査 + for (var row = 1; row <= 1000; row++) + { + str = sheet.Cell(row, lineJudgeCol).GetFormattedString().Trim(); + if (!KanaConvertUxer.TryConvertHankakuToZenkaku(str, out var cellValue, out var messageForMe)) + { + LoggerUxer.Error($"ライン名の全角化に失敗しました。[エラー内容:{messageForMe}]"); + return false; + } + if (cellValue == lineJudgeValue) + { + // ライン名(同列の1行下) + var lineName = sheet.Cell(row + 1, lineJudgeCol).GetFormattedString().Trim(); + + // 対象ライン以外は飛ばす + if (!lineFilter.CanPass(lineName.Trim())) + { + LoggerUxer.Info($"対象ライン以外をスキップします。[ライン名:{lineName}]"); + continue; + } + + var lineId = DictionaryUxer.GetValueOrDefault(dicLine, lineName.Replace(",", ""), int.MinValue); + if (lineId == int.MinValue) + { + lineId = DictionaryUxer.GetValueOrDefault(dicLine, lineName, int.MinValue); + } + if (lineId == int.MinValue) + { + LoggerUxer.Error($"ライン名が{KEY_NAME_TO_ID_LIST_FOR_LINE}に登録されていません。[ライン名:{lineName}]"); + return false; + } + LoggerUxer.Info($"[ライン名:{lineName},ラインID:{lineId}]"); + + // 先頭ラインのみの場合、既に1件でもリストにあれば、ループ脱出(念のため) + if (isTopOnly && lineInfoList.Count > 0) break; + + lineInfoList.Add(new ExcelLineDto() + { + LineId = lineId, + LineName = lineName, + ShiftName = sheet.Cell(row + 1, lineJudgeCol + 1).GetFormattedString().Trim(), + DataStartRow = 0, + LineCol = lineJudgeCol, + }); + } + + // データ開始行判定 + var dataStartRowJudgeCell = sheet.Cell(row, dataStartRowJudgeCol).GetFormattedString().Trim(); + if (!string.IsNullOrEmpty(dataStartRowJudgeCell) && dataStartRowJudgeValues.Contains(dataStartRowJudgeCell)) + { + if (lineInfoList.Count > 0) + { + // データ開始行 + var dataStartRow = row + 1; + if (string.IsNullOrEmpty(sheet.Cell(dataStartRow, dataStartRowJudgeCol).GetFormattedString().Trim())) + dataStartRow++; + lineInfoList.Last().DataStartRow = dataStartRow; + LoggerUxer.Info($"[データ開始行:{dataStartRow}]"); + + // 先頭ラインのみの場合、ループ脱出 + if (isTopOnly) break; + } + } + } + if (lineInfoList.Count == 0) + { + // ラインなし + LoggerUxer.Warn($"ライン情報が見つかりませんでした。シートをスキップします。[シート名:{sheet.Name}]"); + return true; + } + + var noStartRowLine = lineInfoList.FirstOrDefault(m => m.DataStartRow == 0); + if (noStartRowLine != null) + { + // データ開始行が見つからなかったラインあり + LoggerUxer.Error($"開始行が見つからないラインがありました。[シート名:{sheet.Name},ライン名:{noStartRowLine.LineName}]"); + return false; + } + return true; + } + + // ファイルパスよりラインID取得 + private static bool TryGetLineIdFromFilePath( + string filePath, + Dictionary iniDic, + out int lineId) + { + const string KEY_EXCEL_FILE_NAME_PATTERN_TO_LINE = "ExcelFileNamePatternToLine"; + + lineId = -1; + + // ファイル名からライン判定 + var fnptl = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_FILE_NAME_PATTERN_TO_LINE, string.Empty); + if (!string.IsNullOrEmpty(fnptl)) + { + LoggerUxer.Info($"ファイル名からラインIDを取得します。[ファイルパス:{filePath}]"); + + var patterns = fnptl.Split('|'); + foreach (var pattern in patterns) + { + var items = pattern.Split(','); + if (items.Length != 2) + { + LoggerUxer.Error( + $"ファイル名からライン判定のパターン定義が不正です。" + + $"[{KEY_EXCEL_FILE_NAME_PATTERN_TO_LINE}:{fnptl}]"); + return false; + } + if (StringUxer.WildcardMatch(filePath, items[0])) + { + if (!int.TryParse(items[1].Trim(), out var intVal)) + { + LoggerUxer.Error( + $"ファイル名からライン判定のパターン定義でラインIDが数値ではありません。" + + $"[{KEY_EXCEL_FILE_NAME_PATTERN_TO_LINE}:{fnptl}]"); + return false; + } + lineId = intVal; + } + } + if (lineId == -1) + { + LoggerUxer.Error( + $"ファイル名からライン判定で合致するパターンがありませんでした。" + + $"[ファイル名:{filePath},{KEY_EXCEL_FILE_NAME_PATTERN_TO_LINE}:{fnptl}]"); + return false; + } + return true; + } + LoggerUxer.Info($"ファイル名からラインIDは取得しません。[ファイルパス:{filePath}]"); + return true; + } + + // シート内のセルよりラインID取得 + private static bool TryGetLineIdFromCell( + IXLWorksheet sheet, + Dictionary iniDic, + out int lineId) + { + const string KEY_EXCEL_LINE_KEY_CELL = "ExcelLineKeyCell"; + const string KEY_EXCEL_LINE_KEY_VALUE_PAIR = "ExcelLineKeyValuePair"; + + lineId = -1; + + var lineCell = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_LINE_KEY_CELL, string.Empty); + if (!string.IsNullOrEmpty(lineCell)) + { + LoggerUxer.Info($"セル値からラインIDを取得します。[ラインID取得セル:{lineCell}]"); + + if (!XlUxer.TryValidateA1CellAddress(lineCell, out var _)) + { + LoggerUxer.Error($"ライン取得セルアドレスが不正です。[{KEY_EXCEL_LINE_KEY_CELL}:{lineCell}]"); + return false; + } + + var lineConvStr = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_LINE_KEY_VALUE_PAIR, string.Empty); + if (string.IsNullOrEmpty(lineConvStr)) + { + LoggerUxer.Info($"[ラインID取得なし]"); + return true; + } + LoggerUxer.Info($"[ラインID取得セル:{lineCell}]"); + + // ライン判定値 + var lineJudgeValue = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_LINE_KEY_VALUE_PAIR, string.Empty); + if (string.IsNullOrEmpty(lineJudgeValue)) + { + LoggerUxer.Error($"設定ファイルにライン判定値が設定されていません。[キー:{KEY_EXCEL_LINE_KEY_VALUE_PAIR}]"); + return false; + } + LoggerUxer.Info($"[ライン判定値:{lineJudgeValue}]"); + + // ライン名→ID変換辞書 + var convList = lineJudgeValue.Split('|').ToList(); + Dictionary convDic = new Dictionary(); + foreach (var str in convList) + { + var items = str.Split(','); + if (items.Length < 2) continue; + convDic.Add(items[0], items[1]); + } + if (convDic.Count == 0) + { + LoggerUxer.Error($"ラインID辞書が0件です。[キー:{KEY_EXCEL_LINE_KEY_VALUE_PAIR}]"); + return false; + } + + // ライン名(というか変換元文字列)のセル値取得 + var lineValue = sheet.Cell(lineCell).GetFormattedString(); + + // 辞書変換 + if (!convDic.ContainsKey(lineValue)) + { + LoggerUxer.Error( + $"ラインID辞書に登録されていません。" + + $"[{KEY_EXCEL_LINE_KEY_VALUE_PAIR}:{lineJudgeValue}," + + $"{KEY_EXCEL_LINE_KEY_CELL}:{lineCell}," + + $"セル値:{lineValue}]"); + return false; + } + + // ラインID + var strLineId = convDic[lineValue]; + if (!int.TryParse(strLineId, out var intValue)) + { + LoggerUxer.Error( + $"ラインIDが数値ではありません。" + + $"[{KEY_EXCEL_LINE_KEY_VALUE_PAIR}:{lineJudgeValue}," + + $"{KEY_EXCEL_LINE_KEY_CELL}:{lineCell}," + + $"セル値:{lineValue}," + + $"ラインID値:{strLineId}"); + return false; + } + lineId = intValue; + return true; + } + LoggerUxer.Info($"セルからのラインID取得なし。[キー:{KEY_EXCEL_LINE_KEY_CELL}]"); + return true; + } + + // 開始行取得 + private static bool TryGetStartRow( + IXLWorksheet sheet, + Dictionary iniDic, + out int startRow) + { + const string KEY_EXCEL_DATA_START_ROW_JUDGE_COL = "ExcelDataStartRowJudgeCol"; + const string KEY_EXCEL_DATA_START_ROW_JUDGE_VALUES = "ExcelDataStartRowJudgeValues"; + + startRow = -1; + + // データ開始行判定値 + List dataStartRowJudgeValues = new List(); + + var str = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_DATA_START_ROW_JUDGE_COL, string.Empty); + if (string.IsNullOrEmpty(str)) + { + LoggerUxer.Error($"設定ファイルにデータ開始行判定列が設定されていません。[キー:{KEY_EXCEL_DATA_START_ROW_JUDGE_COL}]"); + return false; + } + if (!XlUxer.TryConvertColLetterToNumber(str, out var dataStartRowJudgeCol)) + { + LoggerUxer.Error($"設定ファイルのデータ開始行判定列が不正です。[キー:{KEY_EXCEL_DATA_START_ROW_JUDGE_COL},値:{str}]"); + return false; + } + LoggerUxer.Info($"[データ開始行判定列:{str}(番号:{dataStartRowJudgeCol})]"); + + // データ開始行判定値 + str = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_DATA_START_ROW_JUDGE_VALUES, string.Empty); + if (string.IsNullOrEmpty(str)) + { + LoggerUxer.Error($"設定ファイルにデータ開始行判定値が設定されていません。[キー:{KEY_EXCEL_DATA_START_ROW_JUDGE_VALUES}]"); + return false; + } + dataStartRowJudgeValues = str.Split(',').ToList(); + LoggerUxer.Info($"[データ開始行判定値:{string.Join(",", dataStartRowJudgeValues.ToArray())}]"); + + // 1000行まで走査 + for (var row = 1; row <= 1000; row++) + { + // データ開始行判定 + var dataStartRowJudgeCell = sheet.Cell(row, dataStartRowJudgeCol).GetFormattedString().Trim(); + if (!string.IsNullOrEmpty(dataStartRowJudgeCell) && + dataStartRowJudgeValues.Contains(dataStartRowJudgeCell)) + { + // データ開始行 + var dataStartRow = row + 1; + + // 👇多分不要なので削除 + //if (string.IsNullOrEmpty(sheet.Cell(dataStartRow, dataStartRowJudgeCol).GetFormattedString().Trim())) + //{ + // dataStartRow++; + //} + + startRow = dataStartRow; + LoggerUxer.Info($"[データ開始行:{startRow}]"); + break; + } + } + return !(startRow == -1); + } + + /// + /// Excelシートよりデータ取得 + /// + /// シート + /// ライン情報 + /// 日付辞書 + /// 開始日 + /// INI辞書 + /// [参照]WE生産計画詳細リスト + /// [参照]タクト管理リスト + /// 成否 + private static bool GetData( + IXLWorksheet sheet, + ExcelLineDto lineInfo, + DateTime now, + Dictionary dateDic, + DateTime fromDate, + Dictionary iniDic, + List weOrderList) + { + const string KEY_EXCEL_DATA_END_JUDGE_COL = "ExcelDataEndJudgeCol"; + const string KEY_EXCEL_DATA_END_JUDGE_VALUE = "ExcelDataEndJudgeValue"; + const string KEY_EXCEL_HIDDEN_ROW_HANDLING = "ExcelHiddenRowHandling"; + const string KEY_EXCEL_AF_WE_COL = "ExcelAfWeCol"; + + const string HIDDEN_ROW_HANDLING_SKIP = "skip"; + const string HIDDEN_ROW_HANDLING_INCLUDE = "include"; + const string HIDDEN_ROW_HANDLING_WARN = "warn"; + + // データ終了判定列 + var str = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_DATA_END_JUDGE_COL, string.Empty); + //if (int.TryParse(str, out var excelDataEndJudgeCol) == false || excelDataEndJudgeCol < 1) + if (!XlUxer.TryConvertColLetterToNumber(str, out var excelDataEndJudgeCol)) + { + LoggerUxer.Error($"設定ファイルのExcelデータ終了判定列が未設定または不正な値です。[{KEY_EXCEL_DATA_END_JUDGE_COL}:{str}]"); + return false; + } + LoggerUxer.Info($"[データ終了判定列:{str}(番号:{excelDataEndJudgeCol})]"); + + // データ終了判定値 + var excelDataEndJudgeValue = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_DATA_END_JUDGE_VALUE, string.Empty); + + // 非表示行の扱い(未指定時はwarn) + var hiddenRowHandlinng = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_HIDDEN_ROW_HANDLING, HIDDEN_ROW_HANDLING_WARN); + LoggerUxer.Info($"[非表示行の扱い({KEY_EXCEL_HIDDEN_ROW_HANDLING})={hiddenRowHandlinng}]"); + + // MC生産負荷行番号の取得 + if (!GetMcSeisanFukaRow(sheet, iniDic, out var mcSeisanFukaRow)) + { + return false; + } + if (mcSeisanFukaRow >= 1) + { + LoggerUxer.Info($"[MC生産負荷行番号:{mcSeisanFukaRow}]"); + } + + // AF/WE列 + str = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_AF_WE_COL, string.Empty); + if (str == string.Empty) + { + LoggerUxer.Error($"設定ファイルにAF/WE列が登録されていません。[キー:{KEY_EXCEL_AF_WE_COL}]"); + return false; + } + if (!XlUxer.TryConvertColLetterToNumber(str, out var excelAfWeCol)) + { + LoggerUxer.Error($"設定ファイルのAF/WE列の設定値が不正です。[{KEY_EXCEL_AF_WE_COL}:{str}]"); + return false; + } + LoggerUxer.Info($"[AF/WE列:{str}(番号:{excelAfWeCol})]"); + + // データ開始行から繰り返す + for (int row = lineInfo.DataStartRow; ; row++) + { + // データ行終了値が見つからない + if (row > 1000) + { + LoggerUxer.Error($"データ終了判定値が見つかりません。[{KEY_EXCEL_DATA_END_JUDGE_COL}:{excelDataEndJudgeCol},{KEY_EXCEL_DATA_END_JUDGE_VALUE}:{excelDataEndJudgeValue}]"); + return false; + } + + // データ行終了判定 + var judgeValue = sheet.Cell(row, excelDataEndJudgeCol).GetFormattedString(); + if (StringUxer.WildcardMatch( + judgeValue, + excelDataEndJudgeValue)) + { + LoggerUxer.Info($"[データ行終了判定値検出行:{row},判定値:{judgeValue}]"); + break; + } + + if (sheet.Row(row).IsHidden) + { + // 非表示行の時 + switch(hiddenRowHandlinng.ToLower()) + { + case HIDDEN_ROW_HANDLING_SKIP: + // スキップ + continue; + case HIDDEN_ROW_HANDLING_INCLUDE: + // 対象 + break; + case HIDDEN_ROW_HANDLING_WARN: + // 警告(ログ+スキップ) + LoggerUxer.Warn($"非表示行をスキップします。[行番号:{row}]"); + continue; + default: + // 無効値 + LoggerUxer.Error($"設定ファイルの非表示行の扱いに無効な値が設計されています。[キー:{KEY_EXCEL_HIDDEN_ROW_HANDLING},値:{hiddenRowHandlinng}]"); + return false; + } + } + + //// 機種コード(基本部番)が空の行は飛ばす(GCellは結合セルも加味している) + //if (string.IsNullOrEmpty(XlUxer.GCell(sheet, row, lineInfo.LineCol).GetFormattedString())) continue; + // AF/WE判定列が空の行は飛ばす + if (string.IsNullOrEmpty(XlUxer.GCell(sheet, row, excelAfWeCol).GetFormattedString())) continue; + + // WE生産計画詳細データ取得 + if (!GetWeOrderFromSheet(sheet, iniDic, lineInfo, now, row, dateDic, fromDate, excelAfWeCol, mcSeisanFukaRow, weOrderList)) + { + return false; + } + } + return true; + } + + private static bool GetDataEazy( + IXLWorksheet sheet, + DateTime now, + Dictionary dateDic, + DateTime fromDate, + Dictionary iniDic, + List cdList, + ExcelSettingsDto excelSettings, + List outList) + { + const string KEY_EXCEL_DATA_END_JUDGE_COL = "ExcelDataEndJudgeCol"; + const string KEY_EXCEL_DATA_END_JUDGE_VALUE = "ExcelDataEndJudgeValue"; + const string KEY_EXCEL_HIDDEN_ROW_HANDLING = "ExcelHiddenRowHandling"; + const string KEY_EXCEL_AF_WE_COL = "ExcelAfWeCol"; + const string KEY_EXCEL_ROW_KIND_COL = "ExcelRowKindCol"; + const string KEY_EXCEL_ROW_KIND_TARGETS = "ExcelRowKindTargets"; + + const string HIDDEN_ROW_HANDLING_SKIP = "skip"; + const string HIDDEN_ROW_HANDLING_INCLUDE = "include"; + const string HIDDEN_ROW_HANDLING_WARN = "warn"; + + // データ終了判定列 + var str = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_DATA_END_JUDGE_COL, string.Empty); + if (!XlUxer.TryConvertColLetterToNumber(str, out var excelDataEndJudgeCol)) + { + LoggerUxer.Error($"設定ファイルのExcelデータ終了判定列が未設定または不正な値です。[{KEY_EXCEL_DATA_END_JUDGE_COL}:{str}]"); + return false; + } + LoggerUxer.Info($"[データ終了判定列:{str}(番号:{excelDataEndJudgeCol})]"); + + // データ終了判定値 + var excelDataEndJudgeValue = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_DATA_END_JUDGE_VALUE, string.Empty); + var dataEndRetryCount = 0; + if (excelDataEndJudgeValue.IndexOf(",") >= 0) + { + // カンマあり + var items = excelDataEndJudgeValue.Split(','); + if (items.Length == 2) + { + if (int.TryParse(items[1], out var intValue)) + { + dataEndRetryCount = intValue; + excelDataEndJudgeValue = items[0]; + } + } + } + + // 非表示行の扱い(未指定時はwarn) + var hiddenRowHandlinng = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_HIDDEN_ROW_HANDLING, HIDDEN_ROW_HANDLING_WARN); + LoggerUxer.Info($"[非表示行の扱い({KEY_EXCEL_HIDDEN_ROW_HANDLING})={hiddenRowHandlinng}]"); + + // AF/WE列 + str = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_AF_WE_COL, string.Empty); + var strK = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_ROW_KIND_COL, string.Empty); + if (string.IsNullOrEmpty(str) && string.IsNullOrEmpty(strK)) + { + LoggerUxer.Error($"設定ファイルにAF/WE列または行種類列が登録されていません。[キー:{KEY_EXCEL_AF_WE_COL},{KEY_EXCEL_ROW_KIND_COL}]"); + return false; + } + var excelAfWeCol = 0; + if (!string.IsNullOrEmpty(str) && !XlUxer.TryConvertColLetterToNumber(str, out excelAfWeCol)) + { + LoggerUxer.Error($"設定ファイルのAF/WE列の設定値が不正です。[{KEY_EXCEL_AF_WE_COL}:{str}]"); + return false; + } + var excelRowKindColNoList = new List(); + if (!string.IsNullOrEmpty(strK)) + { + var colNos = strK.Split('+'); + foreach (var colNo in colNos) + { + var intVal = -1; + if (!string.IsNullOrEmpty(colNo) && !XlUxer.TryConvertColLetterToNumber(colNo, out intVal)) + { + LoggerUxer.Error($"設定ファイルの行種類列の設定値が不正です。[{KEY_EXCEL_ROW_KIND_COL}:{strK}]"); + return false; + } + if (intVal != -1) excelRowKindColNoList.Add(intVal); + } + } + List rowKindTargetsList = null; + if (excelRowKindColNoList.Count > 0) + { + var strRowKinds = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_ROW_KIND_TARGETS, string.Empty); + if (string.IsNullOrEmpty(strRowKinds)) + { + LoggerUxer.Error($"設定ファイルに行種類列の対象値が登録されていません。[キー:{KEY_EXCEL_ROW_KIND_TARGETS}]"); + return false; + } + rowKindTargetsList = strRowKinds.Split(',').ToList(); + } + if (excelAfWeCol == 0) + { + LoggerUxer.Info($"[AF/WE列:なし]"); + } + else + { + LoggerUxer.Info($"[AF/WE列:{str}(番号:{excelAfWeCol})]"); + } + if (excelRowKindColNoList.Count == 0) + { + LoggerUxer.Info($"[行種類列:なし]"); + } + else + { + LoggerUxer.Info($"[行種類列:{strK}(番号:{string.Join(",", excelRowKindColNoList)})]"); + } + + if (!TryGetStartRow(sheet, iniDic, out var startRow)) + { + LoggerUxer.Error($"開始行の取得に失敗しました。"); + return false; + } + + // データ開始行から繰り返す + var endJudgeCnt = 0; + for (int row = startRow; ; row++) + { + // データ行終了値が見つからない + if (row > 3000) + { + LoggerUxer.Error($"データ終了判定値が見つかりません。[{KEY_EXCEL_DATA_END_JUDGE_COL}:{excelDataEndJudgeCol},{KEY_EXCEL_DATA_END_JUDGE_VALUE}:{excelDataEndJudgeValue}]"); + return false; + } + + // データ行終了判定 + var judgeValue = XlUxer.GCell(sheet, row, excelDataEndJudgeCol).GetFormattedString().Trim(); + + //if (string.IsNullOrEmpty(judgeValue)) + // LoggerUxer.Info("ここよ💖"); + if (row == 402) + LoggerUxer.Info("ここよ💖"); + + if (StringUxer.WildcardMatch( + judgeValue, + excelDataEndJudgeValue)) + { + if (dataEndRetryCount > 0) + { + endJudgeCnt++; + + if (endJudgeCnt > dataEndRetryCount) + { + // おわり + LoggerUxer.Info($"[データ行終了判定値検出行:{row},判定値:{judgeValue},連続回数:{endJudgeCnt}]"); + break; + } + LoggerUxer.Info($"[データ行終了判定値検出行:{row},判定値:{judgeValue},連続回数:{endJudgeCnt}]"); + continue; + } + LoggerUxer.Info($"[データ行終了判定値検出行:{row},判定値:{judgeValue}]"); + break; + } + else + { + endJudgeCnt = 0; + } + + if (sheet.Row(row).IsHidden) + { + // 非表示行の時 + switch (hiddenRowHandlinng.ToLower()) + { + case HIDDEN_ROW_HANDLING_SKIP: + // スキップ + continue; + case HIDDEN_ROW_HANDLING_INCLUDE: + // 対象 + break; + case HIDDEN_ROW_HANDLING_WARN: + // 警告(ログ+スキップ) + LoggerUxer.Warn($"非表示行をスキップします。[行番号:{row}]"); + continue; + default: + // 無効値 + LoggerUxer.Error($"設定ファイルの非表示行の扱いに無効な値が設計されています。[キー:{KEY_EXCEL_HIDDEN_ROW_HANDLING},値:{hiddenRowHandlinng}]"); + return false; + } + } + + // AF/WE判定列が空の行は飛ばす + if (excelAfWeCol > 0 && + string.IsNullOrEmpty(XlUxer.GCell(sheet, row, excelAfWeCol).GetFormattedString())) + continue; + + // 行種類が対象に含まれない行は飛ばす + var rowKind = string.Empty; + //var isRowKindFirst = false; + //var isRowKindLast = false; + if (excelRowKindColNoList.Count > 0) + { + // 複数列指定対応 + foreach (var col in excelRowKindColNoList) + { + rowKind += XlUxer.GCell(sheet, row, col).GetFormattedString().Trim(); + } + + // 改行除去 + rowKind = StringUxer.CutKaigyo(rowKind); + + if (string.IsNullOrEmpty(rowKind)) continue; + if (!rowKindTargetsList.Contains(rowKind)) continue; + + // 👇未使用のため削除 + //isRowKindFirst = rowKindTargetsList.IndexOf(rowKind) == 0; + //isRowKindLast = rowKindTargetsList.IndexOf(rowKind) == (rowKindTargetsList.Count - 1); + } + + // 日毎値 + var targetDateList = dateDic + .Where(m => m.Value >= fromDate) + .OrderBy(m => m.Key) + .ToList(); + foreach (var kvp in targetDateList) + { + if (sheet.Cell(row, kvp.Key).TryGetValue(out var intValue) && + intValue != 0) + { + // 数値の値があるとき(あっても0以外)のみデータ作成 + + // 項目データ取得 + if (!TryGetEasyItems(sheet, row, cdList, kvp.Value, intValue, excelSettings, out var items, out var messageForMe)) + { + LoggerUxer.Error($"Eazy項目値取得に失敗しました。[エラー詳細:{messageForMe}]"); + return false; + } + + // リストに追加 + outList.Add(items); + } + } + } + return true; + } + + private static bool TryGetEasyItems( + IXLWorksheet sheet, + int row, + List cdList, + DateTime date, + int su, + ExcelSettingsDto excelSettings, + out string[] items, + out string messageForMe) + { + items = new string[cdList.Count]; + messageForMe = string.Empty; + + for (int cnt = 0; cnt < cdList.Count; cnt++) + { + //if (cnt == 5) + // LoggerUxer.Info("きたよ💖"); + + var item = string.Empty; + + switch(cdList[cnt].Type) + { + case ColumnType.Fixed: + item = cdList[cnt].FixedValue; + break; + case ColumnType.Mapping: + if (!ExcelCellValidatorUxer.IsValidA1Format(cdList[cnt].TargetCol + "1")) + { + messageForMe = $"列レターが不正です。[項目名:{cdList[cnt].LogicalName},列レター値:{cdList[cnt].TargetCol}]"; + return false; + } + var col = ExcelCellValidatorUxer.ColumnNameToNumber(cdList[cnt].TargetCol); + item = XlUxer.GCell(sheet, row, col).GetFormattedString().Trim(); + break; + case ColumnType.Conversion: + case ColumnType.FileConversion: + if (!ExcelCellValidatorUxer.IsValidA1Format(cdList[cnt].TargetCol + "1")) + { + messageForMe = $"列レターが不正です。[項目名:{cdList[cnt].LogicalName},列レター値:{cdList[cnt].TargetCol}]"; + return false; + } + col = ExcelCellValidatorUxer.ColumnNameToNumber(cdList[cnt].TargetCol); + var key = XlUxer.GCell(sheet, row, col).GetFormattedString().Trim(); // スペース値のみのとき空文字とする + key = key.Replace("\r", "").Replace("\n", ""); + + // まずは標準辞書から + item = DictionaryUxer.GetValueOrDefault( + cdList[cnt].ConvertMap, key, string.Empty); + + if (string.IsNullOrEmpty(item)) + { + // ないとき、Excel辞書から + if (excelSettings.KVPDic.ContainsKey(cdList[cnt].LogicalName)) + { + var dic = excelSettings.KVPDic[cdList[cnt].LogicalName]; + item = DictionaryUxer.GetValueOrDefault( + dic, key, string.Empty); + } + } + + if (string.IsNullOrEmpty(item)) + { + messageForMe = $"変換値が取得できませんでした。[項目名:{cdList[cnt].LogicalName},セル値:{key}]"; + return false; + } + break; + case ColumnType.FuncReplace: + var str = cdList[cnt].FixedValue.Trim().Trim('(').Trim(')').Trim(); + string[] delimita = new string[] { "→"}; + var part = str.Split(delimita, StringSplitOptions.None); + if (part.Length != 2) + { + messageForMe = $"関数指定内容が不正です。[項目名:{cdList[cnt].LogicalName},関数指定内容:{cdList[cnt].FixedValue}]"; + return false; + } + var letter = cdList[cnt].TargetCol.Trim(); + if (!ExcelCellValidatorUxer.IsValidA1Format(letter + "1")) + { + messageForMe = $"関数指定値の列が不正です。[項目名:{cdList[cnt].LogicalName},列レター値:{cdList[cnt].TargetCol}]"; + return false; + } + col = ExcelCellValidatorUxer.ColumnNameToNumber(letter); + var text = XlUxer.GCell(sheet, row, col).GetFormattedString().Trim(); + item = text.Replace(part[0].Trim('\"'), part[1].Trim('\"')); + break; + + case ColumnType.FuncSubstring: + str = cdList[cnt].FixedValue.Trim().Trim('(').Trim(')').Trim(); + part = str.Split(','); + if (part.Length != 2) + { + messageForMe = $"関数指定内容が不正です。[項目名:{cdList[cnt].LogicalName},関数指定内容:{cdList[cnt].FixedValue}]"; + return false; + } + letter = cdList[cnt].TargetCol.Trim(); + if (!ExcelCellValidatorUxer.IsValidA1Format(letter + "1")) + { + messageForMe = $"関数指定値の列が不正です。[項目名:{cdList[cnt].LogicalName},列レター値:{cdList[cnt].TargetCol}]"; + return false; + } + col = ExcelCellValidatorUxer.ColumnNameToNumber(letter); + text = XlUxer.GCell(sheet, row, col).GetFormattedString().Trim(); + + if (!int.TryParse(part[0].Trim(), out var intStartKeta)) + { + messageForMe = $"関数指定値の開始桁が不正です。[項目名:{cdList[cnt].LogicalName},開始位置:{part[0].Trim()}]"; + return false; + } + + if (!int.TryParse(part[1].Trim(), out var intKetasu)) + { + messageForMe = $"関数指定値の桁数が不正です。[項目名:{cdList[cnt].LogicalName},開始位置:{part[1].Trim()}]"; + return false; + } + + item = text.Substring(intStartKeta - 1, intKetasu); + break; + + case ColumnType.HorizontalDate: + item = date.ToString("yyyy/MM/dd"); + break; + case ColumnType.ValueAmount: + if (!string.IsNullOrEmpty(cdList[cnt].FixedValue) && + !string.IsNullOrEmpty(cdList[cnt].TargetCol)) + { + var valueList = cdList[cnt].FixedValue.Split('|').ToList(); + var colList = cdList[cnt].TargetCol.Split('+').ToList(); + var text2 = string.Empty; + foreach(var col2 in colList) + { + if (!XlUxer.TryConvertColLetterToNumber(col2, out var _)) + { + messageForMe = $"列レターが不正です。[項目名:{cdList[cnt].LogicalName},列レター:{cdList[cnt].TargetCol}]"; + return false; + } + text2 += XlUxer.GCell(sheet, col2 + row).GetFormattedString().Trim(); + } + text2 = StringUxer.CutKaigyo(text2); + + if (valueList.Contains(text2)) + { + item = su.ToString(); + } + else + { + item = string.Empty; + } + } + else + { + item = su.ToString(); + } + break; + case ColumnType.LineId: + if (string.IsNullOrEmpty(cdList[cnt].FixedValue)) + { + messageForMe = $"ラインIDが取得されていません。[項目名:{cdList[cnt].LogicalName}]"; + return false; + } + item = cdList[cnt].FixedValue; + break; + case ColumnType.ModuleId: + if (string.IsNullOrEmpty(cdList[cnt].FixedValue)) + { + messageForMe = $"モジュールIDが取得されていません。[項目名:{cdList[cnt].LogicalName}]"; + return false; + } + item = cdList[cnt].FixedValue; + break; + } + items[cnt] = item; + } + return true; + } + + ///// + ///// タクト管理データ取得 + ///// + ///// シート + ///// ライン情報 + ///// 行 + ///// INI辞書 + ///// リスト + ///// [出力]タクトインデックス + ///// 成否 + //private static bool GetTactManagementFromRow(IXLWorksheet sheet, ExcelLineDto lineInfo, int row, ref List list, out int tactIndex) + //{ + + // // 基本部番 + // var kihonBuban = CreateBuban(CutKaigyo(XlUxer.GCell(sheet, row, COL_BUBAN).GetFormattedString())); + + // // 機種コード + // var modelCd = XlUxer.GCell(sheet, row, COL_MODEL_CD).GetFormattedString(); + // if (string.IsNullOrEmpty(modelCd)) + // { + // // 空のとき、既存リスト内の同一部番があればそこから取得 + // var dto = list + // .FirstOrDefault(m => m.BasicPartsNo == kihonBuban); + // if (dto != null) + // { + // modelCd = dto.ModelCd; + // } + // else + // { + // // ないとき、上の行を探る! + // for (var rowTmp = row - 1; rowTmp >= 1; rowTmp--) + // { + // var str = XlUxer.GCell(sheet, rowTmp, COL_MODEL_CD).GetFormattedString(); + // if (!string.IsNullOrEmpty(str)) + // { + // modelCd = str; + // break; + // } + // } + // if (string.IsNullOrEmpty(modelCd)) modelCd = "(No Model code!)"; + // } + // } + + // // 派生 + // var delivation = XlUxer.GCell(sheet, row, COL_DERIVATION).GetFormattedString(); + + // // タクト + // var tact = 0; + // if(XlUxer.GCell(sheet, row, COL_TACT).TryGetValue(out var t)) + // { + // tact = t; + // } + + // // リストに追加しタクトインデックス取得 + // tactIndex = TactManagementDto.AddToList(list, new TactManagementDto() + // { + // LineId = lineInfo.LineId, + // ModelCd = modelCd, + // BasicPartsNo = kihonBuban, + // Derivation = delivation, + // Tact = tact, + // }); + // return true; + //} + + /// + /// 改行コードカット + /// + /// 文字列 + /// カット後文字列 + private static string CutKaigyo(string str) + { + return str + .Replace("\r\n", "") + .Replace("\r", "") + .Replace("\n", ""); + } + + /// + /// 部番作成 + /// + /// + /// + private static string CreateBuban(string str) + { + // 謎の全角ハイフン + str = str.Replace("‐", "-"); + + // スペースも稀にあり! + str = str.Replace(" ", ""); + + // 中のスペースは残し、両端のスペースをカット + //str = str.Replace(" ", ""); + str = str.Trim(); + + // 後ろのスペースは不要! + //return (str.Replace("-", " ") + " ").Substring(0, 15); + return str.Replace("-", " ").Trim(); + } + + /// + /// アイテムと列レターのマッピング辞書 + /// + private static Dictionary ItemColumnMappingDic = null; + + private const string INI_KEY_EXCEL_KIHON_BUBAN_GYOSU = "ExcelKihonBubanGyosu"; + private const string INI_KEY_EXCEL_SHIMUKE_TACT_ROW_ZURE = "ExcelShimukeTactRowZure"; + + // WE生産計画詳細データ取得 + private static bool GetWeOrderFromSheet( + IXLWorksheet sheet, + Dictionary iniDic, + ExcelLineDto lineInfo, + DateTime now, + int row, + Dictionary dateDic, + DateTime fromDate, + int afWeCol, + int mcSeisanFukaRow, + List list) + { + //if (int.TryParse(strAfWeCol, out var afWeCol) == false || afWeCol < 1) + //{ + // LoggerUxer.Error($"設定ファイルのAE/WE列番号の設定値が不正です。[キー:{KEY_EXCEL_AF_WE_COL},値:{strAfWeCol}]"); + // return false; + //} + + //if (int.TryParse(strAfWeCol, out var afWeCol) == false || afWeCol < 1) + //{ + // LoggerUxer.Error($"設定ファイルのAE/WE列番号の設定値が不正です。[キー:{KEY_EXCEL_AF_WE_COL},値:{strAfWeCol}]"); + // return false; + //} + + //int COL_BUBAN = lineInfo.LineCol; + //int COL_MODEL_CD = COL_BUBAN - 1; + //int COL_DERIVATION = COL_BUBAN + 1; + //int COL_TACT = COL_DERIVATION + 1; + + // メンバ名前取得用 + var _dto_ = new WeOrderDto(); + + // プロパティのExcelレター登録有無チェック + if (string.IsNullOrEmpty(DictionaryUxer.GetValueOrDefault(ItemColumnMappingDic, nameof(_dto_.BasicPartsNo), string.Empty))) + { + LoggerUxer.Error($"プロパティに対してExcel列レターが登録されていません。[プロパティ:{nameof(_dto_.BasicPartsNo)},登録済みのプロパティ:{string.Join(",", ItemColumnMappingDic.Keys)}]"); + return false; + } + if (string.IsNullOrEmpty(DictionaryUxer.GetValueOrDefault(ItemColumnMappingDic, nameof(_dto_.ModelCd), string.Empty))) + { + LoggerUxer.Error($"プロパティに対してExcel列レターが登録されていません。[プロパティ:{nameof(_dto_.ModelCd)},登録済みのプロパティ:{string.Join(",", ItemColumnMappingDic.Keys)}]"); + return false; + } + if (string.IsNullOrEmpty(DictionaryUxer.GetValueOrDefault(ItemColumnMappingDic, nameof(_dto_.Derivation), string.Empty))) + { + LoggerUxer.Error($"プロパティに対してExcel列レターが登録されていません。[プロパティ:{nameof(_dto_.Derivation)},登録済みのプロパティ:{string.Join(",", ItemColumnMappingDic.Keys)}]"); + return false; + } + if (string.IsNullOrEmpty(DictionaryUxer.GetValueOrDefault(ItemColumnMappingDic, nameof(_dto_.TactTime), string.Empty))) + { + LoggerUxer.Error($"プロパティに対してExcel列レターが登録されていません。[プロパティ:{nameof(_dto_.TactTime)},登録済みのプロパティ:{string.Join(",", ItemColumnMappingDic.Keys)}]"); + return false; + } + // 派生(区分)とタクトの行ずれ数 + var haseiTactZure = int.TryParse( + DictionaryUxer.GetValueOrDefault( + iniDic, INI_KEY_EXCEL_SHIMUKE_TACT_ROW_ZURE, "0"), out var intVal0) + ? intVal0 : 0; + + // 基本部番行数 + var kihonBubanGyosu = + int.TryParse( + DictionaryUxer.GetValueOrDefault(iniDic, INI_KEY_EXCEL_KIHON_BUBAN_GYOSU, "1"), + out var intVal) ? intVal : 1; + + // 基本部番列番号 + var colNo = XlUxer.GetColNo(ItemColumnMappingDic[nameof(_dto_.BasicPartsNo)]); + // 基本部番 + var kihonBuban = string.Empty; + for (var cnt = 0; ; cnt++) + { + var rowTmp = row - cnt; + kihonBuban = XlUxer.GCell(sheet, rowTmp, colNo).GetFormattedString(); + if (kihonBubanGyosu >= 2) kihonBuban += XlUxer.GCell(sheet, rowTmp + 1, colNo).GetFormattedString(); + if (kihonBubanGyosu >= 3) kihonBuban += XlUxer.GCell(sheet, rowTmp + 2, colNo).GetFormattedString(); + kihonBuban = CreateBuban(CutKaigyo(kihonBuban)); + // とりあえず長さが10以上であれば連結成功とみなす! + if (kihonBuban.Trim().Length >= 10) break; + if (cnt >= 10) + { + LoggerUxer.Error($"基本部番の取得に失敗しました。[シート名:{sheet.Name},行:{row}]"); + return false; + } + } + + // 機種コード列(レター) + var letter = ItemColumnMappingDic[nameof(_dto_.ModelCd)]; + + // 機種コード + var modelCd = string.Empty; + if (letter.IndexOf(",") >= 0) + { + // 漁法モード + var strSplit = letter.Split(','); + var gyohoName = strSplit[0].Trim(); + switch (gyohoName) + { + case "別シート": + // バリデ済みのためここではバリデしない + var sheetName = strSplit[1].Trim(); + var bubanColLetter = strSplit[2].Trim(); + var kishuColLetter = strSplit[3].Trim(); + var startRow = int.Parse(strSplit[4].Trim()); + var book = sheet.Workbook; + if (!book.Worksheets.Contains(sheetName)) + { + // シート名なし + LoggerUxer.Error($"機種コードの漁法でシート名が存在しません。[シート名:{sheetName},キー名:{KEY_EXCEL_ITEM_NAME_AND_COLUMN_LETTER_MAPPING}]"); + return false; + } + var sheetTmp = book.Worksheet(sheetName); + const int KARA_GYO_MAX = 30; + var karaGyoCnt = 0; + for (var rowTmp = startRow; rowTmp < 10000; rowTmp++) + { + var buban = sheetTmp.Cell(bubanColLetter + rowTmp).GetFormattedString().Trim(); + + // 救済システム:1個左の列も探してみたりする… + var colNoQsai = XlUxer.GetColNo(bubanColLetter); + // 1列目だったら諦めましょう… + if (colNoQsai != 1) colNoQsai--; + var bubanQsai = sheetTmp.Cell(ExcelColumnHelperUxer.GetExcelColumnLetter(colNoQsai) + rowTmp).GetFormattedString().Trim(); + // そしてそれは、ハイフン付きのままだったりする… + bubanQsai = bubanQsai.Replace("-", " "); + + var kishu = sheetTmp.Cell(kishuColLetter + rowTmp).GetFormattedString().Trim(); + if (string.IsNullOrEmpty(buban) && string.IsNullOrEmpty(kishu)) + { + // 空行 + karaGyoCnt++; + if (karaGyoCnt >= KARA_GYO_MAX) + { + // 空行最大を超過👉別シートに登録なし + LoggerUxer.Error($"機種コードの漁法で基本部番がシートに登録されていません。[シート名:{sheetName},基本部番:{kihonBuban},キー名:{KEY_EXCEL_ITEM_NAME_AND_COLUMN_LETTER_MAPPING}]"); + return false; + } + } + + if (buban.Length < 10) continue; + + //LoggerUxer.Info($"[基本部番:{kihonBuban.Trim()},シート部番:{buban}]"); + var kihonBuban_mae = kihonBuban.Trim().Substring(0, 8); + var kihonBuban_ato = kihonBuban.Trim().Substring(9); + //if (buban.IndexOf(kihonBuban.Trim()) >= 0 && !string.IsNullOrEmpty(kishu)) + if (buban.Substring(0, 8) == kihonBuban_mae && + buban.Substring(9).IndexOf(kihonBuban_ato) == 0 && + !string.IsNullOrEmpty(kishu)) + { + // 発見!(表では部番末尾にあと2桁ついていたりするので、部分一致で検索してます) + modelCd = kishu; + break; + } + + if (bubanQsai.Length < 10) continue; + + // 救済システム!左の列にあったりして… + //if (bubanQsai.IndexOf(kihonBuban.Trim()) >= 0 && !string.IsNullOrEmpty(kishu)) + if (bubanQsai.Substring(0, 8) == kihonBuban_mae && + bubanQsai.Substring(9).IndexOf(kihonBuban_ato) == 0 && + !string.IsNullOrEmpty(kishu)) + { + // 発見! + modelCd = kishu; + break; + } + } + if (string.IsNullOrEmpty(modelCd)) + { + // 別シートに登録なし + LoggerUxer.Error($"機種コードの漁法で基本部番がシートに登録されていません。[シート名:{sheetName},基本部番:{kihonBuban},キー名:{KEY_EXCEL_ITEM_NAME_AND_COLUMN_LETTER_MAPPING}]"); + return false; + } + break; + } + } + else + { + // 列指定モード + modelCd = XlUxer.GCell(sheet, row, XlUxer.GetColNo(letter)).GetFormattedString(); + } + + if (string.IsNullOrEmpty(modelCd)) + { + // 空のとき、既存リスト内の同一部番があればそこから取得 + var dto = list + .FirstOrDefault(m => m.BasicPartsNo == kihonBuban); + if (dto != null) + { + modelCd = dto.ModelCd; + } + else + { + // ないとき、上の行を探る! + if (ItemColumnMappingDic[nameof(_dto_.ModelCd)].IndexOf(",")>=0) + { + for (var rowTmp = row - 1; rowTmp >= 1; rowTmp--) + { + var str = XlUxer.GCell(sheet, rowTmp, + XlUxer.GetColNo( + ItemColumnMappingDic[nameof(_dto_.ModelCd)]) + ).GetFormattedString(); + if (!string.IsNullOrEmpty(str)) + { + modelCd = str; + break; + } + } + } + if (string.IsNullOrEmpty(modelCd)) modelCd = "(No Model code!)"; + } + } + + // 派生 + var derivation = XlUxer.GCell(sheet, row + haseiTactZure, + XlUxer.GetColNo( + ItemColumnMappingDic[nameof(_dto_.Derivation)]) + ).GetFormattedString(); + + // 救済システム:1個上と2個上 + if (string.IsNullOrEmpty(derivation)) + derivation = XlUxer.GCell(sheet, row + haseiTactZure - 1, + XlUxer.GetColNo( + ItemColumnMappingDic[nameof(_dto_.Derivation)]) + ).GetFormattedString(); + if (string.IsNullOrEmpty(derivation)) + derivation = XlUxer.GCell(sheet, row + haseiTactZure - 2, + XlUxer.GetColNo( + ItemColumnMappingDic[nameof(_dto_.Derivation)]) + ).GetFormattedString(); + + // タクト + var tact = 0; + //if (XlUxer.GCell(sheet, row + haseiTactZure, + // XlUxer.GetColNo( + // ItemColumnMappingDic[nameof(_dto_.TactTime)]) + // ).TryGetValue(out var t)) + //{ + // tact = t; + //} + + // 救済システム:1個上と2個上も見る + var strT = string.Empty; + if (string.IsNullOrEmpty(XlUxer.GCell(sheet, row + haseiTactZure, + XlUxer.GetColNo( + ItemColumnMappingDic[nameof(_dto_.TactTime)]) + ).GetFormattedString())) + if (string.IsNullOrEmpty(XlUxer.GCell(sheet, row + haseiTactZure - 1, + XlUxer.GetColNo( + ItemColumnMappingDic[nameof(_dto_.TactTime)]) + ).GetFormattedString())) + strT = XlUxer.GCell(sheet, row + haseiTactZure - 2, + XlUxer.GetColNo( + ItemColumnMappingDic[nameof(_dto_.TactTime)]) + ).GetFormattedString(); + else + strT = XlUxer.GCell(sheet, row + haseiTactZure - 1, + XlUxer.GetColNo( + ItemColumnMappingDic[nameof(_dto_.TactTime)]) + ).GetFormattedString(); + else + strT = XlUxer.GCell(sheet, row + haseiTactZure, + XlUxer.GetColNo( + ItemColumnMappingDic[nameof(_dto_.TactTime)]) + ).GetFormattedString(); + int.TryParse(strT, out tact); + + // AF/WE値 + var afWe = sheet.Cell(row, afWeCol).GetFormattedString().Trim(); + var ueAfWe = sheet.Cell(row - 1, afWeCol).GetFormattedString().Trim(); + + var targetDateList = dateDic + .Where(m => m.Value >= fromDate) + .OrderBy(m => m.Key) + .ToList(); + foreach (var date in targetDateList) + { + if (sheet.Cell(row, date.Key).TryGetValue(out var intValue) && + intValue != 0) + { + // 数値の値があるとき(あっても0以外)のみデータ作成 + var weProductDate = date.Value; + var weAmount = 0; + var kdWeAmount = 0; + var afAmount = 0; + var kpsKintai = lineInfo.ShiftName; + + int? productionLur = null; + + if (mcSeisanFukaRow >= 1) + { + var str = sheet.Cell(mcSeisanFukaRow, date.Key).GetFormattedString(); + str = str.Replace("%", "").Trim(); + if (int.TryParse(str, out var intProductionLur) == false) + { + LoggerUxer.Warn($"MC生産負荷の取得に失敗しました。[日付:{date.Value},セル値:{sheet.Cell(mcSeisanFukaRow, date.Key).GetFormattedString()}]"); + productionLur = -1; + } + else + { + productionLur = intProductionLur; + } + } + + // 既存有無チェック + var kizonDto = list + .FirstOrDefault( + m => + m.LineName == lineInfo.LineName && + m.BasicPartsNo == kihonBuban && + m.Derivation == derivation && + m.WorkDate == weProductDate); + + if ((afWe == "WE" && (ueAfWe == "KD" || derivation == "KD")) || + (afWe == "CKD")) // CKDは新書式にて登場! + { + // KDのWEは別計上 + afWe = "KDWE"; + } + + switch (afWe) + { + case "AF": + case "FUN": // 新書式にて追加 + case "SP": // 新書式にて追加 + case "MULTI": // 新書式にて追加 + //case "KDWE": // KDWEはAFとして登録 + afAmount = intValue; + + if (kizonDto != null) + { + // 既存あり→更新 + if (kizonDto.AfAmount == 0) + { + // 既存がゼロだったら更新 + kizonDto.AfAmount = afAmount; + //LoggerUxer.Info($"★★★AFゼロ更新"); + } + else if (kizonDto.AfAmount != afAmount) + { + // 既存と値が異なる場合、既存優先(更新しない) + LoggerUxer.Warn($"同一日同一コードでAF値が異なります(未更新)。[ライン名:{lineInfo.LineName},機種コード:{kihonBuban},日付:{weProductDate:yyyy/MM/dd},AF値①:{kizonDto.AfAmount},AF値②{afAmount}] ①のまま。"); + } + else + { + // 既存と値が同じ場合、何もしない + //LoggerUxer.Info($"★★★AF同値[{afAmount}]"); + } + } + else + { + // 追加 + list.Add(new WeOrderDto() + { + CreateRecordDate = now, + LineId = lineInfo.LineId, + LineName = lineInfo.LineName, + BasicPartsNo = kihonBuban, + WorkDate = weProductDate, + AfAmount = afAmount, + WeAmount = weAmount, + KdWeAmount = kdWeAmount, + ProductionLur = productionLur, + ModelCd = modelCd, + Derivation = derivation, + TactTime = tact, + }); + } + break; + + case "WE": + // WE + weAmount = intValue; + if (kizonDto != null) + { + // 既存あり→更新 + if (kizonDto.WeAmount == 0) + { + // 既存がゼロだったら更新 + kizonDto.WeAmount = weAmount; + //LoggerUxer.Info($"★★★WEゼロ更新"); + } + else if (kizonDto.WeAmount != weAmount) + { + // 既存と値が異なる場合、既存優先(更新しない) + LoggerUxer.Warn($"同一日同一コードでWE値が異なります(未更新)。[ライン名:{lineInfo.LineName},機種コード:{kihonBuban},日付:{weProductDate:yyyy/MM/dd},WE値①:{kizonDto.WeAmount},WE値②{weAmount}] ①のまま。"); + } + else + { + // 既存と値が同じ場合、何もしない + //LoggerUxer.Info($"★★★WE同値[{weAmount}]"); + } + } + else + { + // 追加 + list.Add(new WeOrderDto() + { + CreateRecordDate = now, + LineId = lineInfo.LineId, + LineName = lineInfo.LineName, + BasicPartsNo = kihonBuban, + WorkDate = weProductDate, + AfAmount = afAmount, + WeAmount = weAmount, + KdWeAmount = kdWeAmount, + ProductionLur = productionLur, + ModelCd = modelCd, + Derivation = derivation, + TactTime = tact, + }); + } + break; + + case "KDWE": + // KDWE + kdWeAmount = intValue; + // ※注意:最終的なテーブル項目へのマッピングはINSERT-SQLに委ねる。 + + if (kizonDto != null) + { + // 既存あり→更新 + if (kizonDto.KdWeAmount == 0) + { + // 既存がゼロだったら更新 + kizonDto.KdWeAmount = kdWeAmount; + } + else if (kizonDto.KdWeAmount != kdWeAmount) + { + // 既存と値が異なる場合、既存優先(更新しない) + LoggerUxer.Warn($"同一日同一コードでKDWE値が異なります(未更新)。[ライン名:{lineInfo.LineName},機種コード:{kihonBuban},日付:{weProductDate:yyyy/MM/dd},WE値①:{kizonDto.KdWeAmount},WE値②{kdWeAmount}] ①のまま。"); + } + else + { + // 既存と値が同じ場合、何もしない + } + } + else + { + // 追加 + list.Add(new WeOrderDto() + { + CreateRecordDate = now, + LineId = lineInfo.LineId, + LineName = lineInfo.LineName, + BasicPartsNo = kihonBuban, + WorkDate = weProductDate, + AfAmount = afAmount, + WeAmount = weAmount, + KdWeAmount = kdWeAmount, + ProductionLur = productionLur, + ModelCd = modelCd, + Derivation = derivation, + TactTime = tact, + }); + } + break; + default: + break; + } + } + } + return true; + } + + /// + /// Excelの「MC生産負荷(2交替)」の行番号取得 + /// + /// シート + /// INIDIC + /// [出力]行番号(無効の場合-1) + /// 成否 + private static bool GetMcSeisanFukaRow(IXLWorksheet sheet, Dictionary iniDic, out int retRow) + { + const string KEY_EXCEL_MC_SEISAN_FUKA_ENABLED = "ExcelMcSeisanFukaEnabled"; + const string KEY_EXCEL_MC_SEISAN_FUKA_JUDGE_COL = "ExcelMcSeisanFukaJudgeCol"; + const string KEY_EXCEL_MC_SEISAN_FUKA_JUDGE_VALUE_PATTERN = "ExcelMcSeisanFukaJudgeValuePattern"; + + retRow = -1; + + var str = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_MC_SEISAN_FUKA_ENABLED, string.Empty); + if (string.IsNullOrEmpty(str)) + { + LoggerUxer.Error($"MC生産負荷有効無効指定が未設定です。[キー:{KEY_EXCEL_MC_SEISAN_FUKA_ENABLED}]"); + return false; + } + + if (!bool.TryParse(str, out var isMcSeisanFukaEnabled)) + { + LoggerUxer.Error($"MC生産負荷有効無効指定が無効値です。[キー:{KEY_EXCEL_MC_SEISAN_FUKA_ENABLED},値:{str}]"); + return false; + } + + if (!isMcSeisanFukaEnabled) + { + LoggerUxer.Info($"MC生産負荷は無効です。処理を継続します。"); + return true; + } + + str = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_MC_SEISAN_FUKA_JUDGE_COL, string.Empty); + if (string.IsNullOrEmpty(str)) + { + LoggerUxer.Error($"MC生産負荷判定列が未設定です。[キー:{KEY_EXCEL_MC_SEISAN_FUKA_JUDGE_COL}]"); + return false; + } + if (!XlUxer.TryConvertColLetterToNumber(str, out var mcSeisanFukaRowJudgeCol)) + { + LoggerUxer.Error($"MC生産負荷判定列の設定値が不正です。[{KEY_EXCEL_MC_SEISAN_FUKA_JUDGE_COL}:{str}]"); + return false; + } + LoggerUxer.Info($"[MC生産負荷判定列:{str}(番号:{mcSeisanFukaRowJudgeCol})]"); + + var mcSeisanFukaRowJudgeValuePattern = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCEL_MC_SEISAN_FUKA_JUDGE_VALUE_PATTERN, string.Empty); + if (string.IsNullOrEmpty(mcSeisanFukaRowJudgeValuePattern)) + { + LoggerUxer.Error($"設定ファイルのMC生産負荷行判定値パターンが未設定です。[キー:{KEY_EXCEL_MC_SEISAN_FUKA_JUDGE_VALUE_PATTERN}]"); + return false; + } + + for (int row = 1; row <= 1000; row++) + { + // ワイルドカードマッチング + if (StringUxer.WildcardMatch( + sheet.Cell(row, mcSeisanFukaRowJudgeCol).GetFormattedString().Trim(), + mcSeisanFukaRowJudgeValuePattern)) + { + retRow = row; + return true; + } + } + LoggerUxer.Error($"設定ファイルのMC生産負荷行が見つかりませんでした。[列:{mcSeisanFukaRowJudgeCol},判定値パターン:{mcSeisanFukaRowJudgeValuePattern}]"); + return false; + } + private static bool TryGetYmFromText(string text, out DateTime? dt) + { + dt = null; + + if (text.IndexOf("年") >= 0 && text.IndexOf("月") >= 0) + { + var pos = text.IndexOf("年"); + var strNen = text.Substring(0, pos); + text = text.Substring(pos + "年".Length); + pos = text.IndexOf("月"); + var strTsuki = text.Substring(0, pos); + // 2. TryParseを実行(成功したらdtに代入、失敗ならnullのまま) + if (DateTime.TryParse($"{strNen}/{strTsuki}/01", out var tempDt)) + { + dt = tempDt; // ここで DateTime? に代入 + return true; + } + else + { + dt = null; + return false; + } + } + else if (text.IndexOf("/") >= 0) + { + var pos = text.IndexOf("/"); + var strNen = text.Substring(0, pos); + text = text.Substring(pos + "/".Length); + pos = text.IndexOf("/"); + var strTsuki = string.Empty; + if (pos < 0) + { + strTsuki = text; + } + else + { + strTsuki = text.Substring(pos + "/".Length); + } + // 2. TryParseを実行(成功したらdtに代入、失敗ならnullのまま) + if (DateTime.TryParse($"{strNen}/{strTsuki}/01", out var tempDt)) + { + dt = tempDt; // ここで DateTime? に代入 + return true; + } + else + { + dt = null; + return false; + } + } + else return false; + } + + private static int RunOneFileEazy( + string path, + DateTime now, + List checkItems, + Dictionary iniDic, + ExcelSettingsDto excelSettings, + DateTime fromDate, + DateTime? toDate, + LineIdHelper lineIdHelper, + List cdList, + List outList) + { + // INIキー定義 + const string KEY_INCLUDED_SHEET_NAMES = "IncludedSheetNames"; + const string KEY_EXCLUDED_SHEET_NAMES = "ExcludedSheetNames"; + + if (System.IO.Path.GetExtension(path).ToLower() != ".xlsx" && + System.IO.Path.GetExtension(path).ToLower() != ".xlsm") + { + LoggerUxer.Warn($"拡張子が異なるためスキップします。[{path}]"); + return (int)Common.RetCode.Success; + } + + LoggerUxer.Info($"[ファイル:{path}]"); + + try + { + //using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read)) + //using (var book = new XLWorkbook(fs)) + using (var book = LoadWorkbookWithoutPhoneticError(path)) + { + // 処理対象のシート名 + var incSheetsCsv = DictionaryUxer.GetValueOrDefault(iniDic, KEY_INCLUDED_SHEET_NAMES, string.Empty); + if (!string.IsNullOrEmpty(incSheetsCsv)) + { + LoggerUxer.Info($"[処理対象シート名:{incSheetsCsv}]"); + } + else + { + LoggerUxer.Info($"[処理対象シート名:なし]"); + } + + // 処理対象外のシート名 + var excSheetsCsv = DictionaryUxer.GetValueOrDefault(iniDic, KEY_EXCLUDED_SHEET_NAMES, string.Empty); + if (!string.IsNullOrEmpty(excSheetsCsv)) + { + if (string.IsNullOrEmpty(incSheetsCsv)) + { + LoggerUxer.Info($"[処理対象外シート名:{excSheetsCsv}]"); + } + else + { + LoggerUxer.Warn($"処理対象シート名が指定されているため、処理対象外指定は無効になります。[キー:{KEY_EXCLUDED_SHEET_NAMES},値:{excSheetsCsv}]"); + } + } + else + { + LoggerUxer.Info($"[処理対象外シート名:なし]"); + } + // シートフィルタ作成 + var incSheets = string.IsNullOrEmpty(incSheetsCsv) ? new string[] { } : incSheetsCsv.Split(','); + var excSheets = string.IsNullOrEmpty(excSheetsCsv) ? new string[] { } : excSheetsCsv.Split(','); + var sheetFilter = new SheetFilterUxer(incSheets, excSheets); + + // シート右端から左へループ + for (int sheetIndex = book.Worksheets.Count; sheetIndex >= 1; sheetIndex--) + { + // シート取得 + var sheet = book.Worksheet(sheetIndex); + + if (!sheetFilter.CanPass(sheet.Name.Trim())) + { + // シート名フィルタに引っかからなかった時、飛ばす + LoggerUxer.Info($"対象外のシートをスキップします。[シート名:{sheet.Name}]"); + continue; + } + + // 条件を満たさないシートは飛ばす + if (CheckExcelSheet(sheet, checkItems) == false) + { + LoggerUxer.Info($"シート条件を満たさないためスキップします。[シート名:{sheet.Name}]"); + continue; + } + + LoggerUxer.Info($"[シート名:{sheet.Name}]"); + + // ラインID取得 + if (!TryGetLineIdFromCell(sheet, iniDic, out var id)) + { + return (int)Common.RetCode.ExcelLinesInfoGetError; + } + if (id > 0) + { + LoggerUxer.Info($"[ラインID:{id}]"); + } + lineIdHelper.SheetLineId = id; + + // 列定義にラインIDを入れる + SetLineIdToColumnDifinition(lineIdHelper.GetCurrentLineId(), cdList); + + // モジュールID取得 + var moduleId = -1; + if (lineIdHelper.GetCurrentLineId() > 0 && + lineIdHelper.GetCurrentModuleId() < 0) + { + if (!GetModuleIdFromLineId(lineIdHelper.GetCurrentLineId(), out moduleId,out var messageForMe)) + { + LoggerUxer.Error($"モジュールIDの取得に失敗しました。[ラインID:{lineIdHelper.GetCurrentLineId()},詳細:{messageForMe}]"); + return (int)Common.RetCode.ExcelOneFileException; + } + } + if (moduleId > 0) + { + LoggerUxer.Info($"[モジュールID:{moduleId}]"); + } + + lineIdHelper.SheetModuleId = moduleId; + + // 列定義にモジュールIDを入れる + SetModuleIdToColumnDifinition(moduleId, cdList); + + // 日付情報取得 + if (!GetDateList(sheet, fromDate, toDate, iniDic, out var dateDic)) + { + return (int)Common.RetCode.ExcelDateCellGetError; + } + + // 最大日が開始日より小さい場合、シートを飛ばす + if (dateDic.Count > 0 && dateDic.Values.Max() < fromDate) + { + LoggerUxer.Info($"シート最大日が開始日より前のためスキップします。[シート最大日:{(DateTime)(dateDic.Values.Max()):yyyy/MM/dd}]"); + continue; + } + + // データ取得 + if (!GetDataEazy(sheet, now, dateDic, fromDate, iniDic, cdList, excelSettings, outList)) + { + return (int)Common.RetCode.ExcelDataGetError; + } + } + } + } + catch (Exception ex) + { + LoggerUxer.Error($"1ファイル処理にてエラーが発生しました。[{ex.Message}]"); + return (int)Common.RetCode.ExcelOneFileException; + } + return (int)Common.RetCode.Success; + } + + // ライン判別とINI更新 + private static bool LineHanteiFromFilePathAndReloadIni( + string path, + Dictionary iniDic, + string sectionName, + out int lineId, + out ExcelSettingsDto excelSettings, + out string resultMessage) + { + lineId = -1; + excelSettings = null; + resultMessage = string.Empty; + + if (!TryGetLineIdFromFilePath(path, iniDic, out lineId)) + { + resultMessage = "ファイル名からラインID取得に失敗しました。"; + return false; + } + if (lineId == -1) + { + LoggerUxer.Info("ファイル名からラインIDは取得しませんでした。"); + return true; + } + + // Excel設定のロード + if (!LoadExcelSetting(iniDic, lineId, out excelSettings)) + { + return false; + } + // INI読みに反映 + IniHelper.IniList = excelSettings.IniList; + + // INI取得しなおし(Excel設定で変化する) + foreach (var key in iniDic.Keys.ToList()) + iniDic[key] = IniHelper.ReadValue(Common.INI_FILE_PATH, sectionName, key); + foreach (var iniDto in excelSettings.IniList + .Where(m => m.Section == sectionName) + .ToList()) + iniDic[iniDto.Key] = IniHelper.ReadValue(Common.INI_FILE_PATH, sectionName, iniDto.Key); + return true; + } + + /// + /// ラインIDからモジュールIDを取得する + /// + /// + /// + /// + /// + private static bool GetModuleIdFromLineId( + int lineId, + out int moduleId, + out string resultMessage) + { + resultMessage = string.Empty; + moduleId = -1; + var path = ".\\LineIdModuleId.csv"; + if (!CsvUxer.TryGetDictionaryFromCsv(path, out var dic,out var messageForMe)) + { + resultMessage = $"モジュールIDの取得に失敗しました。[詳細:{messageForMe}]"; + return false; + } + if (dic.ContainsKey(lineId.ToString())) + { + moduleId = int.TryParse(dic[lineId.ToString()], out var intVal) ? intVal : moduleId; + } + return true; + } + + // Excel設定のロード + private static bool LoadExcelSetting(DictionaryiniDic, int lineId, out ExcelSettingsDto settingsDto) + { + const string INI_KEY_EXCEL_SETTING_FILE_BY_LINE_ID = "ExcelSettingFileByLineId"; + + settingsDto = new ExcelSettingsDto(); + + var esfbli = DictionaryUxer.GetValueOrDefault(iniDic, INI_KEY_EXCEL_SETTING_FILE_BY_LINE_ID, string.Empty); + if (string.IsNullOrEmpty(esfbli)) + { + LoggerUxer.Error($"Excel設定ファイルは未定義です。[キー:{INI_KEY_EXCEL_SETTING_FILE_BY_LINE_ID}]"); + return false; + } + var defs = esfbli.Trim().Split('|'); + foreach (var def in defs) + { + var items = def.Trim().Split(','); + if (items.Length != 2) + { + LoggerUxer.Error($"Excel設定ファイルの定義が不正です(カンマ区切り)。[{INI_KEY_EXCEL_SETTING_FILE_BY_LINE_ID}:{esfbli}]"); + return false; + } + if (items[0].Trim() == lineId.ToString()) + { + var path = items[1].Trim(); + if (!path.StartsWith(".\\")) + { + if (path.StartsWith("\\")) + { + path = "." + path; + } + else + { + path = ".\\" + path; + } + } + if (!File.Exists(path)) + { + LoggerUxer.Error($"Excel設定ファイルが存在しません。[{INI_KEY_EXCEL_SETTING_FILE_BY_LINE_ID}:{esfbli},ラインID:{lineId}]"); + return false; + } + + using (var book = LoadWorkbookWithoutPhoneticError(path)) + { + if (book.Worksheets.Contains("設定")) + { + // 設定シートがあった時だけ読む + var sheet = book.Worksheet("設定"); + var tobashiCnt = 0; + for (var row = 1; row<1000;row++) + { + var text = sheet.Cell(row, 1).GetFormattedString().Trim(); + if (string.IsNullOrEmpty(text) || !text.All(c => c <= 127)) + { + // A列値が空欄または英数字以外もあるとき、無効行とみなす + tobashiCnt++; + if (tobashiCnt > 10) + { + // おわり + break; + } + continue; + } + settingsDto.IniList.Add(new IniDto() + { + Section = text, + Key = sheet.Cell(row, 2).GetFormattedString().Trim(), + Value = sheet.Cell(row, 3).GetFormattedString().Trim(), + }); + } + } + + // その他のシート + foreach (var sheet in book.Worksheets + .Where(m => m.Name != "設定")) + { + var tobashiCnt = 0; + Dictionary dic = new Dictionary(); + for (var row = 2; row < 1000; row++) + { + var textA = sheet.Cell(row, 1).GetFormattedString().Trim(); + var textB = sheet.Cell(row, 2).GetFormattedString().Trim(); + if (string.IsNullOrEmpty(textA) /*|| !textB.All(c => c <= 127)*/) + { + // A列値が空欄またはB列値に英数字以外もあるとき、無効行とみなす + tobashiCnt++; + if (tobashiCnt > 10) + { + // おわり + break; + } + continue; + } + dic.Add(textA, textB); + } + settingsDto.KVPDic.Add(sheet.Name, dic); + } + } + break; + } + } + return true; + } + + /// + /// ラインIDを列定義リストに入れ込む + /// + /// + /// + private static void SetLineIdToColumnDifinition( + int lineId, + List cdList) + { + foreach (var cd in cdList) + { + if (cd.Type == ColumnType.LineId) + { + cd.FixedValue = lineId < 1 ? string.Empty : lineId.ToString(); + } + } + } + + /// + /// モジュールIDを列定義リストに入れ込む + /// + /// + /// + private static void SetModuleIdToColumnDifinition( + int moduleId, + List cdList) + { + foreach (var cd in cdList) + { + if (cd.Type == ColumnType.ModuleId) + { + cd.FixedValue = moduleId < 1 ? string.Empty : moduleId.ToString(); + } + } + } + + private static XLWorkbook LoadWorkbookWithoutPhoneticError(string filePath) + { + var ms = new MemoryStream(); + using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + fs.CopyTo(ms); + } + + ms.Position = 0; + using (var archive = new ZipArchive(ms, ZipArchiveMode.Update, true)) + { + var entry = archive.GetEntry("xl/sharedStrings.xml"); + if (entry != null) + { + string content; + // 1. まず読み込む(usingで確実にStreamを閉じる) + using (var sr = new StreamReader(entry.Open())) + { + content = sr.ReadToEnd(); + } + + // 2. 正規表現でふりがなタグを削除 + var fixedContent = Regex.Replace(content, @"]*>.*?", ""); + + // 3. 内容を書き換える(Deleteせずに、再度Openして先頭から上書き) + // Updateモードなので、Open() して書き込むと上書きされます + using (var sw = new StreamWriter(entry.Open(), System.Text.Encoding.UTF8)) + { + // ストリームの長さを0にしてから書き込む(古い内容が残らないように) + sw.BaseStream.SetLength(0); + sw.Write(fixedContent); + } + } + } + + ms.Position = 0; + return new XLWorkbook(ms); + } + } + public class FuncExcelToCsvWeOrderByIniResultDto : IFuncResultDto + { + public bool Succeeded { get; set; } = false; + public int ExitCode { get; set; } = 0; + public string ResultMessage { get; set; } = string.Empty; + } + + /// + /// 書式つきテキストパターンDTO + /// + public class FormattedTextPatternDto + { + public string ColumnName { get; set; } = string.Empty; + public string JudgeValue { get; set; } = string.Empty; + public string FileName { get; set; } = string.Empty; + public string Format { get; set; } = string.Empty; + } + + /// + /// Excel設定 + /// + public class ExcelSettingsDto + { + public List IniList { get; set; } = new List(); + public Dictionary> KVPDic { get; set; } = new Dictionary>(); + } + + public class LineIdHelper + { + private const int ID_NOTHING = -1; + + // --- File階層 --- + private int _fileLineId = ID_NOTHING; + public int FileLineId + { + private get => _fileLineId; // クラス内からだけ読める + set + { + _fileLineId = value; + FileModuleId = ID_NOTHING; + SheetLineId = ID_NOTHING; // 下位を連鎖リセット + } + } + public int FileModuleId { private get; set; } = ID_NOTHING; + + // --- Sheet階層 --- + private int _sheetLineId = ID_NOTHING; + public int SheetLineId + { + private get => _sheetLineId; + set + { + _sheetLineId = value; + SheetModuleId = ID_NOTHING; + RowLineId = ID_NOTHING; // 下位を連鎖リセット + } + } + public int SheetModuleId { private get; set; } = ID_NOTHING; + + // --- Row階層 --- + private int _rowLineId = ID_NOTHING; + public int RowLineId + { + private get => _rowLineId; + set + { + _rowLineId = value; + RowModuleId = ID_NOTHING; // 最下層なのでここでストップ + } + } + public int RowModuleId { private get; set; } = ID_NOTHING; + + + // 🔓 唯一の公開出口:最も深い階層のIDを賢く判定 + public int GetCurrentLineId() + { + if (RowLineId != ID_NOTHING) return RowLineId; + if (SheetLineId != ID_NOTHING) return SheetLineId; + return FileLineId; + } + + public int GetCurrentModuleId() + { + if (RowLineId != ID_NOTHING) return RowModuleId; + if (SheetLineId != ID_NOTHING) return SheetModuleId; + return FileModuleId; + } + } + + public class KaniChuzoLpdcJissekiNyuryokuDto + { + public DateTime Date { get; set; } = DateTime.MinValue; + public string Kishu { get; set; } = string.Empty; + public int Suryo { get; set; } = -1; + public int Furyo { get; set; } = -1; + public string Hensu { get; set; } = string.Empty; + } + public class KaniChuzoLpdcChuzoInDto + { + public string Kishu { get; set; } = string.Empty; + public string Buban { get; set; } = string.Empty; + public string Kubun { get; set; } = string.Empty; + public DateTime Date { get; set; } = DateTime.MinValue; + public int Su { get; set; } = -1; + } + public class KaniChuzoLpdcChuzoInDto +} diff --git a/src/ExcelToCsvToDb/Commons/Common.cs b/src/ExcelToCsvToDb/Commons/Common.cs new file mode 100644 index 0000000..502d761 --- /dev/null +++ b/src/ExcelToCsvToDb/Commons/Common.cs @@ -0,0 +1,474 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace ExcelToCsvToDb.Commons +{ + /// + /// 共通 + /// + public static class Common + { + #region 定数 + + #region 起動時引数 + + //OLD + ///// + ///// 起動時引数:処理区分:溶接加工計画 + ///// + //public const string KIDOU_PARA_PROC_WE_ORDER = "/WEORDER"; + ///// + ///// 起動時引数:機能区分:Excel To CSV + ///// + //public const string KIDOU_PARA_FUNC_EXCEL_TO_CSV = "/EXCELTOCSV"; + ///// + ///// 起動時引数:機能区分:CSV To DB + ///// + //public const string KIDOU_PARA_FUNC_CSV_TO_DB = "/CSVTODB"; + //OLD + + #endregion + + #region メインPJ固有ステップ + + /// + /// メイン固有ステップ:Excel→CSV(WE生産計画) + /// + public const string MAINPJ_KOYU_STEP_NAME_EXCEL_TO_CSV_WEORDER = "EXCELTOCSV_WEORDER"; + + /// + /// メイン固有ステップ:Excel→CSV(簡易) + /// + public const string MAINPJ_KOYU_STEP_NAME_EXCEL_TO_CSV_EAZY = "EXCELTOCSV_EAZY"; + + #endregion + + #region 戻り値(プロセス終了値) + + /// + /// 戻り値(プロセス終了値) + /// + public enum RetCode + { + /// + /// 正常終了 + /// + Success = 0, + + /// + /// メイン:起動時引数不足エラー + /// + ExecuteParameterCountError = 1, + + /// + /// メイン:INIステップ情報の形式が不正 + /// + IniStepInfoFormatError = 2, + + /// + /// メイン:ステップ機能エラー + /// + StepFunctionError = 3, + + /// + /// メイン:ステップリストエラー + /// + StepListError = 4, + + /// + /// メイン:INIファイルパスエラー + /// + IniFiilePathError = 5, + + /// + /// ExcelToCsvWe:開始日エラー + /// + StartDateError = 1001, + + /// + /// ExcelToCsvWe:入力フォルダパスエラー + /// + InFolderPathError = 1002, + + /// + /// ExcelToCsvWe:対象ファイル群取得エラー + /// + TargetFilesGetError = 1003, + + /// + /// ExcelToCsvWe:CSV出力時エラー + /// + ExportToCsvError = 1004, + + /// + /// ExcelToCsvWe:CSVファイル名が未設定 + /// + CsvFileNameNotSetting = 1005, + + /// + /// ExcelToCsvWe:Excelシートチェック項目不正 + /// + ExcelSheelCheckItemInvalid = 1006, + + /// + /// ExcelToCsvWe:Excel→CSV処理時に例外発生 + /// + ExcelToCsvException = 1007, + + /// + /// ExcelToCsvWe:Excel日付セル取得エラー + /// + ExcelDateCellGetError = 1008, + + /// + /// ExcelToCsvWe:Excelデータ取得エラー + /// + ExcelDataGetError = 1009, + + /// + /// ExcelToCsvWe:Excelファイル処理時に例外発生 + /// + ExcelOneFileException = 1010, + + /// + /// ExcelToCsvWe:Excelライン(複数)情報取得エラー + /// + ExcelLinesInfoGetError = 1011, + + /// + /// ExcelToCsvWe:アイテムとExcel列マッピングエラー + /// + CreateItemExcelColumnMappingDicError = 1012, + + /// + /// ExcelToCsvWe:設定ファイル設定値エラー + /// + ConfigError = 1013, + + /// + /// ExcelToCsvWe:終了日エラー + /// + EndDateError = 1014, + + /// + /// Excel設定エラー + /// + ExcelSettingsError = 1015, + + /// + /// 簡易特殊処理エラー + /// + KaniTokushuError = 1016, + } + + #endregion + + #region ファイル・フォルダ + + /// + /// SQLフォルダパス + /// + public const string SQL_FOLDER_PATH = "SQL"; + + #endregion + + #region INIファイル + + #region ファイルパス + + /// + /// INIファイル名 + /// + public const string INI_FILE_NAME = "setting.ini"; + + /// + /// INIファイルパス(実行後に動的に設定される) + /// + public static string INI_FILE_PATH = string.Empty; + + #endregion + + #region セクション名 + + ///// + ///// セクション名:CSV to DB + ///// + //public const string INI_SECTION_CSVTODB = "CsvToDb"; + + ///// + ///// セクション名:SFTP + ///// + //public const string INI_SECTION_SFTP = "SFTP"; + + ///// + ///// セクション名:バックアップ + ///// + //public const string INI_SECTION_BACKUP = "Backup"; + + #endregion + + #region 共通セクションのキー + + ///// + ///// キー名:タイトル + ///// + //public const string INI_KEY_TITLE = "Title"; + + ///// + ///// CSVエンコーディング名 + ///// + //public const string INI_KEY_CSV_ENCODING = "CsvEncoding"; + + #endregion + + #region ExcelToCsvセクションのキー + + ///// + ///// キー名:入力フォルダー + ///// + //public const string INI_KEY_IN_FOLDER = "InFolder"; + + ///// + ///// キー名:入力ファイル名(ワイルドカード指定あり) + ///// + //public const string INI_KEY_IN_FILE_NAME = "InFileName"; + + ///// + ///// キー名:Excelシートチェック項目 + ///// 行,列,値|行,列,値|... + ///// 行と列は1オリジン + ///// + //public const string INI_KEY_EXCEL_SHEET_CHECK_ITEMS = "ExcelSheetCheckItems"; + + ///// + ///// キー名:ライン判定列番号(1オリジン) + ///// + //public const string INI_KEY_EXCEL_LINE_JUDGE_COL = "ExcelLineJudgeCol"; + + ///// + ///// キー名:日付行番号(1オリジン) + ///// + //public const string INI_KEY_EXCEL_DATE_ROW = "ExcelDateRow"; + + ///// + ///// キー名:日付行開始列番号(1オリジン) + ///// + //public const string INI_KEY_EXCEL_DATE_ROW_START_COL = "ExcelDateRowStartCol"; + + ///// + ///// キー名:日付行終了値 + ///// + //public const string INI_KEY_EXCEL_DATE_ROW_END_VALUE = "ExcelDateRowEndValue"; + + ///// + ///// キー名:データ終了判定列番号(1オリジン) + ///// + //public const string INI_KEY_EXCEL_DATA_END_JUDGE_COL = "ExcelDataEndJudgeCol"; + + ///// + ///// キー名:データ終了判定値 + ///// + //public const string INI_KEY_EXCEL_DATA_END_JUDGE_VALUE = "ExcelDataEndJudgeValue"; + + ///// + ///// キー名:非表示行の扱い + ///// skip/include/warn(ログ出し+skip) + ///// + //public const string INI_KEY_EXCEL_HIDDEN_ROW_HANDLING = "ExcelHiddenRowHandling"; + + ///// + ///// キー名:MC生産負荷行判定列番号(1オリジン) + ///// + //public const string INI_KEY_EXCEL_MC_SEISAN_FUKA_JUDGE_COL = "ExcelMcSeisanFukaRowJudgeCol"; + + ///// + ///// キー名:MC生産負荷行判定値(パターン) + ///// + //public const string INI_KEY_EXCEL_MC_SEISAN_FUKA_JUDGE_VALUE_PATTERN = "ExcelMcSeisanFukaRowJudgeValuePattern"; + ///// + ///// キー名:AF/WE列番号(1オリジン) + ///// + //public const string INI_KEY_EXCEL_AF_WE_COL = "ExcelAfWeCol"; + + ///// + ///// キー名:開始日オフセット(加算日数) + ///// + //public const string INI_KEY_DAYS_TO_START_OFFSET = "DaysToStartOffset"; + + ///// + ///// キー名:CSV保存一時フォルダパス + ///// + //public const string INI_KEY_CSV_TEMP_FOLDER = "CsvTempFolder"; + + ///// + ///// キー名:CSVファイル名(WE生産計画) + ///// + //public const string INI_KEY_CSV_FILE_NAME_WE_ORDER = "CsvFileNameWeOrder"; + + ///// + ///// キー名:ファイル名のプレフィックス(日時フォーマット) + ///// + //public const string INI_KEY_FILE_DT_PREFIX = "FileDtPrefix"; + + ///// + ///// キー名:ファイル名のサフィックス(日時フォーマット) + ///// + //public const string INI_KEY_FILE_DT_SUFFIX = "FileDtSuffix"; + + ///// + ///// キー名:名前→ID変換リスト(ライン用) + ///// + //public const string INI_KEY_NAME_TO_ID_LIST_FOR_LINE = "NameToIdListForLine"; + + #endregion + + #region CsvToDbセクションのキー + + ///// + ///// キー名:CSVファイル名パターン(カンマ区切り複数指定) + ///// + //public const string INI_KEY_CSV_FILE_NAME_PATTERNS = "CsvFileNamePatterns"; + + ///// + ///// キー名:INSERTのSQLファイル名(カンマ区切り複数指定) + ///// + //public const string INI_KEY_INSERT_SQL_FILES = "InsertSqlFiles"; + + ///// + ///// キー名:重複チェックSQLファイル名(カンマ区切り複数指定) + ///// + //public const string INI_KEY_DUP_CHECK_SQL_FILES = "DupCheckSqlFiles"; + + ///// + ///// キー名:挿入前削除SQLファイル名(カンマ区切り複数指定) + ///// + //public const string INI_KEY_DELETE_BEFORE_INSERT_SQL_FILES = "DeleteBeforeInsertSqlFiles"; + + ///// + ///// キー名:SFTPダウンロード後のアクション + ///// ("DELETE":ダウンロード元ファイルの削除) + ///// + //public const string INI_KEY_ACTION_AFTER_SFTP_DOWNLOAD = "ActionAfterSFTPDownload"; + + ///// + ///// キー名:SFTPアップロード後のアクション + ///// ("CLEANUP":アップロード元フォルダのクリーンナップ) + ///// + //public const string INI_KEY_ACTION_AFTER_SFTP_UPLOAD = "ActionAfterSFTPUpload"; + + ///// + ///// キー名:DBのプロバイダ名 + ///// + //public const string INI_KEY_DB_PROVIDER_NAME = "DbProviderName"; + + ///// + ///// キー名:DBの接続文字列 + ///// + //public const string INI_KEY_DB_CONNECTION_STRING = "DbConnectionString"; + + ///// + ///// キー名:DB登録後の処理 + ///// "DELETE":ローカルCSVの削除 + ///// "BACKUP":ローカルCSVのバックアップ + ///// + //public const string INI_KEY_ACTION_AFTER_DB_REGIST = "ActionAfterDbRegist"; + + ///// + ///// キー名:CSVバックアップフォルダパス + ///// + //public const string INI_KEY_CSV_BACKUP_FOLDER = "CsvBackupFolder"; + + ///// + ///// キー名:CSVバックアップ:最大日数 + ///// + //public const string INI_KEY_CSV_BACKUP_MAX_DAYS = "CsvBackupMaxDays"; + + ///// + ///// キー名:CSVバックアップ:最大ファイル数 + ///// + //public const string INI_KEY_CSV_BACKUP_MAX_FILE_COUNT = "CsvBackupMaxFileCount"; + + #endregion + + #region SFTPセクションのキー + + /// + /// キー名:ホスト名(またはIPアドレス) + /// + //public const string INI_KEY_SFTP_HOST = "Host"; + + ///// + ///// キー名:ポート番号 + ///// + //public const string INI_KEY_SFTP_PORT = "Port"; + + ///// + ///// キー名:ユーザ名 + ///// + //public const string INI_KEY_SFTP_USER_NAME = "UserName"; + + ///// + ///// キー名:プライベートキーファイルパス + ///// + //public const string INI_KEY_SFTP_PRIVATE_KEY_FILE_PATH = "PrivateKeyFilePath"; + + ///// + ///// キー名:パスフレーズ(暗号化済み) + ///// + //public const string INI_KEY_SFTP_PASS_PHRASE = "PassPhrase"; + + /////// + /////// キー名:リモートパス + /////// + ////public const string INI_KEY_SFTP_REMOTE_PATH = "RemotePath"; + + #endregion + + #endregion + + #region オプションアクション + + ///// + ///// オプションアクション:削除 + ///// + //public const string OPTION_ACTION_DELETE = "DELETE"; + + ///// + ///// オプションアクション:バックアップ + ///// + //public const string OPTION_ACTION_BACKUP = "BACKUP"; + + ///// + ///// オプションアクション:クリーンナップ + ///// + //public const string OPTION_ACTION_CLEANUP = "CLEANUP"; + + #endregion + + #region 非表示行の扱い + + /// + /// 非表示行の扱い:スキップ(処理対象外) + /// + //public const string HIDDEN_ROW_HANDLING_SKIP = "skip"; + + /// + /// 非表示行の扱い:処理対象 + /// + //public const string HIDDEN_ROW_HANDLING_INCLUDE = "include"; + + /// + /// 非表示行の扱い:ワーニング(警告ログしスキップ) + /// + //public const string HIDDEN_ROW_HANDLING_WARN = "warn"; + + #endregion + + #endregion + } +} diff --git a/src/ExcelToCsvToDb/DTO/ExcelLineDto.cs b/src/ExcelToCsvToDb/DTO/ExcelLineDto.cs new file mode 100644 index 0000000..6ef5c51 --- /dev/null +++ b/src/ExcelToCsvToDb/DTO/ExcelLineDto.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ExcelToCsvToDb.DTO +{ + public class ExcelLineDto + { + public int LineId { get; set; } = -1; + public string LineName { get; set; } = string.Empty; + public string ShiftName { get; set; } = string.Empty; + public int DataStartRow { get; set; } = 0; + public int LineCol { get; set; } = 0; + } +} diff --git a/src/ExcelToCsvToDb/DTO/ExcelSheetCheckDto.cs b/src/ExcelToCsvToDb/DTO/ExcelSheetCheckDto.cs new file mode 100644 index 0000000..82cce6c --- /dev/null +++ b/src/ExcelToCsvToDb/DTO/ExcelSheetCheckDto.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ExcelToCsvToDb.DTO +{ + /// + /// Excelシートのチェック(対象のシートかどうか) + /// + public class ExcelSheetCheckDto + { + /// + /// チェック項目内のORのデリミタ + /// + public const string OR_DELIMITER = "[or]"; + + public List a1AddressList { get; set; } = new List(); + public List CheckValueList { get; set; } = new List(); + } +} diff --git a/src/ExcelToCsvToDb/DTO/TactManagementDto.cs b/src/ExcelToCsvToDb/DTO/TactManagementDto.cs new file mode 100644 index 0000000..b0f94ea --- /dev/null +++ b/src/ExcelToCsvToDb/DTO/TactManagementDto.cs @@ -0,0 +1,57 @@ +//using ExcelToCsvToDb.Commons; +//using KssSmaPlaLib.Exchange.Interfaces; +//using KssSmaPlaLib.IO.File; +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using System.Text; +//using System.Threading.Tasks; +//using System.Xml.Linq; + +//namespace ExcelToCsvToDb.DTO +//{ +// /// +// /// タクト管理テーブルDTO +// /// +// public class TactManagementDto : ICsvExportableUxer +// { +// public int TactIndex { get; set; } = -1; +// public int LineId { get; set; } = -1; +// public string ModelCd { get; set; } = string.Empty; +// public string BasicPartsNo { get; set; } = string.Empty; +// public string Derivation { get; set; } = string.Empty; +// public int Tact { get; set; } = -1; + +// public string CsvHeader => CsvUxer.Join("tact_index", "line_id", "model_cd", "basic_parts_no", "derivation", "tact"); + +// public string ToCsvLine() => CsvUxer.Join(TactIndex, LineId, ModelCd, BasicPartsNo, Derivation, Tact); + +// /// +// /// 内容は同一か? +// /// +// /// +// /// +// public bool IsSame(TactManagementDto dto) +// { +// return +// dto.LineId == this.LineId && +// dto.ModelCd == this.ModelCd && +// dto.BasicPartsNo == this.BasicPartsNo && +// dto.Derivation == this.Derivation && +// dto.Tact == this.Tact; +// } + +// public static int AddToList(List list, TactManagementDto dto) +// { +// // リストに同じ内容のDTOがあるか?あった場合そのタクトインデックスを返す +// var existDto = list.FirstOrDefault(m => m.IsSame(dto)); +// if (existDto != null) return existDto.TactIndex; + +// // 新規タクトインデックスを設定しリストに追加 +// dto.TactIndex = list.Count; +// list.Add(dto); + +// return dto.TactIndex; +// } +// } +//} diff --git a/src/ExcelToCsvToDb/DTO/WeOrderDto.cs b/src/ExcelToCsvToDb/DTO/WeOrderDto.cs new file mode 100644 index 0000000..c32f794 --- /dev/null +++ b/src/ExcelToCsvToDb/DTO/WeOrderDto.cs @@ -0,0 +1,63 @@ +using DocumentFormat.OpenXml.Office.CoverPageProps; +using KssSmaPlaLib.DtoMapping.Attributes; +using KssSmaPlaLib.Exchange.Interfaces; +using KssSmaPlaLib.IO.File; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ExcelToCsvToDb.DTO +{ + /// + /// WE生産計画詳細テーブルDTO + /// + public class WeOrderDto : ICsvExportableUxer + { + public DateTime CreateRecordDate { get; set; } = DateTime.Now; + public int LineId { get; set; } = -1; + public string LineName { get; set; } = string.Empty; + [ExcelColumnLetter("D")] + public string BasicPartsNo { get; set; } = string.Empty; + public DateTime WorkDate { get; set; } = DateTime.Now; + public int AfAmount { get; set; } = -1; + public int WeAmount { get; set; } = -1; + public int KdWeAmount { get; set; } = -1; + public int? ProductionLur { get; set; } = -1; + [ExcelColumnLetter("C")] + public string ModelCd { get; set; } = string.Empty; + [ExcelColumnLetter("E")] + public string Derivation { get; set; } = string.Empty; + [ExcelColumnLetter("F")] + public int TactTime { get; set; } = -1; + + public string CsvHeader => CsvUxer.Join( + "create_record_date", + "line_id", + "line_name", + "basic_parts_no", + "work_date", + "af_amount", + "we_amount", + "kd_we_amount", + "production_lur", + "model_cd", + "derivation", + "tact_time"); + + public string ToCsvLine() => CsvUxer.Join( + CreateRecordDate, + LineId, + LineName, + BasicPartsNo, + WorkDate, + AfAmount, + WeAmount, + KdWeAmount, + ProductionLur, + ModelCd, + Derivation, + TactTime); + } +} diff --git a/src/ExcelToCsvToDb/ExcelToCsvToDb.csproj b/src/ExcelToCsvToDb/ExcelToCsvToDb.csproj new file mode 100644 index 0000000..c12099d --- /dev/null +++ b/src/ExcelToCsvToDb/ExcelToCsvToDb.csproj @@ -0,0 +1,190 @@ + + + + + Debug + AnyCPU + {6E9D8E26-7349-4FB9-BACF-8B1DC498E08B} + Exe + ExcelToCsvToDb + ExcelToCsvToDb + v4.8 + 512 + true + true + + + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + packages\BouncyCastle.Cryptography.2.5.1\lib\net461\BouncyCastle.Cryptography.dll + + + packages\ClosedXML.0.105.0\lib\netstandard2.0\ClosedXML.dll + + + packages\ClosedXML.Parser.2.0.0\lib\netstandard2.0\ClosedXML.Parser.dll + + + packages\DocumentFormat.OpenXml.3.1.1\lib\net46\DocumentFormat.OpenXml.dll + + + packages\DocumentFormat.OpenXml.Framework.3.1.1\lib\net46\DocumentFormat.OpenXml.Framework.dll + + + packages\ExcelNumberFormat.1.1.0\lib\net20\ExcelNumberFormat.dll + + + packages\Microsoft.Bcl.AsyncInterfaces.8.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll + + + packages\Microsoft.Bcl.HashCode.1.1.1\lib\net461\Microsoft.Bcl.HashCode.dll + + + packages\Microsoft.Extensions.DependencyInjection.Abstractions.8.0.2\lib\net462\Microsoft.Extensions.DependencyInjection.Abstractions.dll + + + packages\Microsoft.Extensions.Logging.Abstractions.8.0.3\lib\net462\Microsoft.Extensions.Logging.Abstractions.dll + + + packages\Microsoft.IO.RecyclableMemoryStream.3.0.1\lib\netstandard2.0\Microsoft.IO.RecyclableMemoryStream.dll + + + + packages\RBush.Signed.4.0.0\lib\net47\RBush.dll + + + packages\SixLabors.Fonts.1.0.0\lib\netstandard2.0\SixLabors.Fonts.dll + + + + packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + + + packages\System.ComponentModel.Annotations.5.0.0\lib\net461\System.ComponentModel.Annotations.dll + + + + + + packages\System.Diagnostics.DiagnosticSource.8.0.1\lib\net462\System.Diagnostics.DiagnosticSource.dll + + + + + packages\System.Formats.Asn1.8.0.2\lib\net462\System.Formats.Asn1.dll + + + + packages\System.Memory.4.5.5\lib\net461\System.Memory.dll + + + + packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + + packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + + + + packages\System.Security.Cryptography.Xml.8.0.2\lib\net462\System.Security.Cryptography.Xml.dll + + + packages\System.Threading.Channels.8.0.0\lib\net462\System.Threading.Channels.dll + + + packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll + + + packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll + + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + + PreserveNewest + + + + + {4136ce96-10aa-4b55-b49f-68c80e9e3bc8} + KssSmaPlaLib + + + {9F267A81-8387-46F7-A299-CFC26216F895} + ExcelToCsvToDbCommon + + + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + + + + + このプロジェクトは、このコンピューター上にない NuGet パッケージを参照しています。それらのパッケージをダウンロードするには、[NuGet パッケージの復元] を使用します。詳細については、http://go.microsoft.com/fwlink/?LinkID=322105 を参照してください。見つからないファイルは {0} です。 + + + + \ No newline at end of file diff --git a/src/ExcelToCsvToDb/ExcelToCsvToDb.sln b/src/ExcelToCsvToDb/ExcelToCsvToDb.sln new file mode 100644 index 0000000..f3fd27d --- /dev/null +++ b/src/ExcelToCsvToDb/ExcelToCsvToDb.sln @@ -0,0 +1,37 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36119.2 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExcelToCsvToDb", "ExcelToCsvToDb.csproj", "{6E9D8E26-7349-4FB9-BACF-8B1DC498E08B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KssSmaPlaLib", "..\..\..\SharedLibs\KssSmaPlaLib\KssSmaPlaLib.csproj", "{4136CE96-10AA-4B55-B49F-68C80E9E3BC8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExcelToCsvToDbCommon", "..\ExcelToCsvToDbCommon\ExcelToCsvToDbCommon.csproj", "{9F267A81-8387-46F7-A299-CFC26216F895}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6E9D8E26-7349-4FB9-BACF-8B1DC498E08B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6E9D8E26-7349-4FB9-BACF-8B1DC498E08B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6E9D8E26-7349-4FB9-BACF-8B1DC498E08B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6E9D8E26-7349-4FB9-BACF-8B1DC498E08B}.Release|Any CPU.Build.0 = Release|Any CPU + {4136CE96-10AA-4B55-B49F-68C80E9E3BC8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4136CE96-10AA-4B55-B49F-68C80E9E3BC8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4136CE96-10AA-4B55-B49F-68C80E9E3BC8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4136CE96-10AA-4B55-B49F-68C80E9E3BC8}.Release|Any CPU.Build.0 = Release|Any CPU + {9F267A81-8387-46F7-A299-CFC26216F895}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9F267A81-8387-46F7-A299-CFC26216F895}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9F267A81-8387-46F7-A299-CFC26216F895}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9F267A81-8387-46F7-A299-CFC26216F895}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {09A5351C-5B78-4952-AF19-C0C7E615B31A} + EndGlobalSection +EndGlobal diff --git a/src/ExcelToCsvToDb/LineIdModuleId.csv b/src/ExcelToCsvToDb/LineIdModuleId.csv new file mode 100644 index 0000000..18aec82 --- /dev/null +++ b/src/ExcelToCsvToDb/LineIdModuleId.csv @@ -0,0 +1,54 @@ +1,1 +2,1 +3,1 +4,1 +5,1 +6,1 +7,2 +8,2 +9,2 +10,2 +11,2 +12,2 +13,2 +14,2 +15,2 +16,2 +17,2 +18,3 +19,3 +20,3 +21,3 +22,3 +23,3 +24,3 +25,3 +26,3 +27,4 +28,4 +29,4 +30,4 +31,4 +32,4 +33,4 +34,7 +35,7 +36,7 +37,7 +44,6 +45,6 +46,6 +47,6 +48,6 +49,6 +50,6 +51,6 +52,6 +53,6 +54,7 +55,7 +57,6 +58,6 +64,6 +65,6 +66,6 diff --git a/src/ExcelToCsvToDb/Program.cs b/src/ExcelToCsvToDb/Program.cs new file mode 100644 index 0000000..c7ed5f0 --- /dev/null +++ b/src/ExcelToCsvToDb/Program.cs @@ -0,0 +1,151 @@ +using ExcelToCsvToDb.BusinessLogic; +using ExcelToCsvToDb.Commons; +using KssSmaPlaLib.Batch.Dispatch; +using KssSmaPlaLib.Batch.Interface; +using KssSmaPlaLib.Batch.Log; +using KssSmaPlaLib.Batch.StepInfo; +using KssSmaPlaLib.Commons; +using KssSmaPlaLib.Encryption; +using KssSmaPlaLib.Ini; +using KssSmaPlaLib.IO.File; +using KssSmaPlaLib.Tools.FileHack; +using System.Linq; + +namespace ExcelToCsvToDb +{ + internal class Program + { + /// + /// エンドポイント + /// + /// + /// 0:正常終了、-1以下:異常終了 + static int Main(string[] args) + { + // 暗号化ツール(Additional) + if (SimpleEncryptUxer.TuckIntoMain(args)) return 0; + if (FIleEncryptUxer.TuckIntoMain(args)) return 0; + if (SplitFileBySizeUxer.TuckIntoMain(args)) return 0; + if (MergeSplitFilesUxer.TuckIntoMain(args)) return 0; + + // INIファイルパス + if (!PathUxer.TryResolveInAssemblyFolder(Common.INI_FILE_NAME, out Common.INI_FILE_PATH)) + { + LoggerUxer.Error($"設定INIファイルのパス解決に失敗しました。[ファイル名:{Common.INI_FILE_NAME}]"); + return (int)Common.RetCode.IniFiilePathError; + } + + // ログINI初期化(無ければ)と起動ログ + LoggerUxer.Initialize(Common.INI_FILE_PATH); + LoggerUxer.StartInfo(); + + LoggerUxer.Info($"[起動時引数:{string.Join(",", args)}]"); + + if (args.Length < 1) + { + LoggerUxer.Error("起動時引数が1個以上必要です。"); + return (int)Common.RetCode.ExecuteParameterCountError; + } + + // タスク起動判定 + var isTask = false; + string[] argsNew = args; + if (args[0].Trim().ToLower() == "/task") + { + isTask = true; + + LoggerUxer.Info($"タスクモードで起動されました。[指定:{args[0].Trim()}]"); + + // 先頭をカットして従来通り処理させる + argsNew = args.Skip(1).ToArray(); + } + + // 起動パラメータの取得 + VariableUxer.SetArgs(argsNew); + + // CLの機能ディスパッチャ + var stepDispatcher = new StepDispatcherUxer(); + + // タスクモード繰り返しループ + while (true) + { + // 処理区分による分岐 + var shoriKubun = argsNew[0].Trim('/'); + LoggerUxer.Info($"[処理区分:{shoriKubun}]"); + + // ステップリスト取得 + var dic = IniReaderUxer.ReadSection(Common.INI_FILE_PATH, shoriKubun); + if (!StepInfoUxer.TryCreateStepInfoFromIniDic(dic, out var stepInfo, out var messageForMe)) + { + LoggerUxer.Error($"{messageForMe}"); + return (int)Common.RetCode.StepListError; + } + + // ステップ処理開始ログ + StepLogUxer.StepInfoLog(stepInfo); + + // ステップ全件 + foreach (var step in stepInfo.StepList) + { + IFuncResultDto result; + + LoggerUxer.Info($"ステップを開始します。[ステップ番号:{step.StepNo},機能:{step.StepSignature}]"); + + if (!StringUxer.TryParseIniSignature(step.StepSignature, out var functionName, out var funcArgs) || funcArgs.Count < 1) + { + LoggerUxer.Error($"ステップ情報の形式が不正です。[処理区分:{stepInfo.Title},ステップ番号:{step.StepNo},値(機能名):{step.StepSignature}]"); + return (int)Common.RetCode.IniStepInfoFormatError; + } + + // INIの対象セクション名 + var iniSectionName = funcArgs[0]; + + // 処理振り分け + if (functionName.ToUpper() == Common.MAINPJ_KOYU_STEP_NAME_EXCEL_TO_CSV_WEORDER) + { + // 固有(メインPJ):Excel→CSV(WE生産計画詳細) + result = new ExcelToCsv().TryFuncExcelToCsvWeOrderByIni(Common.INI_FILE_PATH, iniSectionName); + if (result.Succeeded == false) + { + LoggerUxer.Error($"ステップが失敗しました。処理を中断します。[エラー内容:{result.ResultMessage}]"); + return result.ExitCode; + } + } + else if (functionName.ToUpper() == Common.MAINPJ_KOYU_STEP_NAME_EXCEL_TO_CSV_EAZY) + { + // 固有(メインPJ):Excel→CSV(簡易) + result = new ExcelToCsv().TryFuncExcelToCsvEazyByIni(Common.INI_FILE_PATH, iniSectionName); + if (result.Succeeded == false) + { + LoggerUxer.Error($"ステップが失敗しました。処理を中断します。[エラー内容:{result.ResultMessage}]"); + return result.ExitCode; + } + } + else + { + // 共通(CL)処理 + if (!stepDispatcher.TryDispatch(functionName, Common.INI_FILE_PATH, iniSectionName, out messageForMe, out var funcResultDto)) + { + LoggerUxer.Error($"ステップの実行に失敗しました。[処理区分:{shoriKubun},ステップ:{step.StepNo},機能名:{step.StepSignature},エラー内容:{messageForMe}]"); + return + funcResultDto != null && funcResultDto.ExitCode != (int)RetCodeUxer.RetCode.Success ? + funcResultDto.ExitCode : + (int)Common.RetCode.StepFunctionError; + } + } + LoggerUxer.Info($"ステップが終了しました。[ステップ番号:{step.StepNo},機能:{step.StepSignature}]"); + } + if (!isTask) + { + LoggerUxer.Info($"全てのステップが終了しました。プログラムを終了します。"); + return (int)Common.RetCode.Success; + } + LoggerUxer.Info($"全てのステップが終了しました。少し休憩してのち、再開いたします。"); + + // インターバル + var sleepSec = int.TryParse(IniHelper.ReadValue(Common.INI_FILE_PATH, "Task", "IntervalSec", "10"), out var intVal) ? intVal : 10; + System.Threading.Thread.Sleep(sleepSec * 1000); + } + } + } +} diff --git a/src/ExcelToCsvToDb/Properties/AssemblyInfo.cs b/src/ExcelToCsvToDb/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..9035dfd --- /dev/null +++ b/src/ExcelToCsvToDb/Properties/AssemblyInfo.cs @@ -0,0 +1,46 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// アセンブリに関する一般的な情報は、次の方法で制御されます。 +// 制御されます。アセンブリに関連付けられている情報を変更するには、 +// これらの属性値を変更します。 +[assembly: AssemblyTitle("ExcelToCsvToDb")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("本田技研工業株式会社")] +[assembly: AssemblyProduct("ExcelToCsvToDb")] +[assembly: AssemblyCopyright("Copyright © 本田技研工業株式会社 2025")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// ComVisible を false に設定すると、このアセンブリ内の型は COM コンポーネントから +// 参照できなくなります。COM からこのアセンブリ内の型にアクセスする必要がある場合は、 +// その型の ComVisible 属性を true に設定します。 +[assembly: ComVisible(false)] + +// このプロジェクトが COM に公開される場合、次の GUID が typelib の ID になります +[assembly: Guid("6e9d8e26-7349-4fb9-bacf-8b1dc498e08b")] + +// アセンブリのバージョン情報は次の 4 つの値で構成されています: +// +// メジャー バージョン +// マイナー バージョン +// ビルド番号 +// リビジョン +// +[assembly: AssemblyVersion("0.9.5.0")] +[assembly: AssemblyFileVersion("0.9.5.0")] +// りれき💛 +// 0.8.1.0 INIファイルパスをEXEパスにする +// 0.8.2.0 基本部番に元々スペースが入っているときの改修 +// 0.9.0.0 新共通書式対応 +// 0.9.1.0 新共通:ファイルパターン一致中最新のみ対象にする機能追加 +// 0.9.2.0 新共通:部番の末尾スペースは不要 +// 0.9.3.0 新共通:DBの挿入前削除で対象データの再過去日から削除するよう修正(修正はCLのほうだけかも) +// 0.9.4.0 新共通:・別シート部番検索でマッチング方式変更 +// ・パターンに複数ファイル該当時の事前DB削除処理の改善 +// ・タスク起動機能の追加 +// 0.9.5.0 新共通:DBつかんでる対策 +// ・トランザクションを外す +// ・バルクインサート対応! diff --git a/src/ExcelToCsvToDb/SQL/DeleteBeforeInsertEazy.sql.txt b/src/ExcelToCsvToDb/SQL/DeleteBeforeInsertEazy.sql.txt new file mode 100644 index 0000000..62f20a7 --- /dev/null +++ b/src/ExcelToCsvToDb/SQL/DeleteBeforeInsertEazy.sql.txt @@ -0,0 +1,6 @@ +DELETE +FROM + vap.t_harahara +WHERE + seisan_date >= :[D]START_DATE +; diff --git a/src/ExcelToCsvToDb/SQL/DeleteBeforeInsertWeOrder.sql.txt b/src/ExcelToCsvToDb/SQL/DeleteBeforeInsertWeOrder.sql.txt new file mode 100644 index 0000000..b7e11ba --- /dev/null +++ b/src/ExcelToCsvToDb/SQL/DeleteBeforeInsertWeOrder.sql.txt @@ -0,0 +1,7 @@ +DELETE +FROM + vap.t_weorder +WHERE + line_id >= :[I]LINE_ID + AND plan_date >= :[D]START_DATE +; diff --git a/src/ExcelToCsvToDb/SQL/DupCheckTactManagement.sql.txt b/src/ExcelToCsvToDb/SQL/DupCheckTactManagement.sql.txt new file mode 100644 index 0000000..4e5ca01 --- /dev/null +++ b/src/ExcelToCsvToDb/SQL/DupCheckTactManagement.sql.txt @@ -0,0 +1,18 @@ +--select +-- 0 +--union all +--select +-- 2 +--; + +SELECT + COUNT(*) AS CNT +FROM + vap.t_tact_management +WHERE + --line_id = :[I]line_id AND + --model_cd = :[S]model_cd AND + basic_parts_no = :[S]basic_parts_no --AND + --derivation = :[S]derivation AND + --tact = :[I]tact +; diff --git a/src/ExcelToCsvToDb/SQL/InsertEazy.sql.txt b/src/ExcelToCsvToDb/SQL/InsertEazy.sql.txt new file mode 100644 index 0000000..b939b7b --- /dev/null +++ b/src/ExcelToCsvToDb/SQL/InsertEazy.sql.txt @@ -0,0 +1,31 @@ +INSERT +INTO vap.t_harahara( + plan_cd + , moto + , saki + , model_cd + , seppen_buban + , target_color + , kako_color + , biko + , buhin_mei + , kotei_cd + , seisan_date + , daisu + , sp_buban +) +VALUES ( + :[S]PlanCd + ,:[S]HaraiMoto + ,:[S]HaraiSaki + ,:[S]ModelCd + ,:[S]SeppenBuban + ,:[S]TargetColor + ,:[S]KakoColor + ,:[S]Biko + ,:[S]Buhinmei + ,:[I]KoteiCd + ,:[D]SeisanHiduke + ,:[I]Daisu + ,:[S]SpBuban +) diff --git a/src/ExcelToCsvToDb/SQL/InsertTactManagement.sql.txt b/src/ExcelToCsvToDb/SQL/InsertTactManagement.sql.txt new file mode 100644 index 0000000..210cfaf --- /dev/null +++ b/src/ExcelToCsvToDb/SQL/InsertTactManagement.sql.txt @@ -0,0 +1,37 @@ +INSERT +INTO + vap.t_tact_management +( + tact_id, + line_id, + model_cd, + basic_parts_no, + derivation, + tact +) +SELECT + CASE + WHEN Q1.tact_id IS NULL THEN 'TA' || :[S]basic_parts_no || '0001' + ELSE 'TA' || :[S]basic_parts_no || Q1.tact_id + END AS tact_id, + :[I]line_id AS line_id, + :[S]model_cd AS model_cd, + :[S]basic_parts_no AS basic_parts_no, + :[S]derivation AS derivation, + :[I]tact AS tact +FROM + ( + SELECT + LPAD((MAX(SUBSTRING(tact_id FROM '.{4}$')::INTEGER) + 1)::TEXT, 4, '0') AS tact_id + FROM + vap.t_tact_management + WHERE + LENGTH(tact_id) > 4 AND + tact_id ~ '\d{4}$' AND -- 末尾4桁が数字 + LEFT(tact_id, LENGTH(tact_id) - 4) = 'TA' || :[S]basic_parts_no + ) Q1 +--INNER JOIN +-- md.m_line L +--ON +-- L.line_name=:line_name +; diff --git a/src/ExcelToCsvToDb/SQL/InsertWeOrder.sql.txt b/src/ExcelToCsvToDb/SQL/InsertWeOrder.sql.txt new file mode 100644 index 0000000..8079472 --- /dev/null +++ b/src/ExcelToCsvToDb/SQL/InsertWeOrder.sql.txt @@ -0,0 +1,32 @@ +INSERT +INTO + vap.t_weorder +( + --we_production_id, + --tact_id, + --we_product_date, + create_record_date, + line_id, + basic_parts_no, + plan_date, + af_amount, + we_amount, + production_lur, + model_cd, + derivation, + tact_time +) +VALUES +( + :[D]create_record_date, + :[I]line_id, + :[S]basic_parts_no, + :[D]work_date, + :[I]we_amount, + 0, + :[I]production_lur, + :[S]model_cd, + :[S]derivation, + :[I]tact_time +) +; diff --git a/src/ExcelToCsvToDb/SQL/InsertWeOrderBulk.sql.txt b/src/ExcelToCsvToDb/SQL/InsertWeOrderBulk.sql.txt new file mode 100644 index 0000000..645e468 --- /dev/null +++ b/src/ExcelToCsvToDb/SQL/InsertWeOrderBulk.sql.txt @@ -0,0 +1,48 @@ +-- 一時テーブルはCSVの全カラムを持つテーブルで、コミットしたら消される +DROP TABLE IF EXISTS work_csv; +CREATE TEMP TABLE work_csv ( + create_record_date timestamp without time zone, + line_id integer, + line_name text, + basic_parts_no text, + work_date date, + af_amount integer, + we_amount integer, + kd_we_amount integer, + production_lur integer, + model_cd text, + derivation text, + tact_time integer +); +-- ON COMMIT DROP; +-- SPLIT -- +COPY work_csv FROM STDIN WITH (FORMAT CSV, HEADER); +-- SPLIT -- +INSERT +INTO + vap.t_weorder + ( + create_record_date, + line_id, + basic_parts_no, + plan_date, + af_amount, + we_amount, + production_lur, + model_cd, + derivation, + tact_time + ) + SELECT + create_record_date, + line_id, + basic_parts_no, + work_date, + af_amount, + we_amount + kd_we_amount, + production_lur, + model_cd, + derivation, + tact_time + FROM + work_csv; diff --git a/src/ExcelToCsvToDb/packages.config b/src/ExcelToCsvToDb/packages.config new file mode 100644 index 0000000..31e6536 --- /dev/null +++ b/src/ExcelToCsvToDb/packages.config @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/ExcelToCsvToDb/setting.ini b/src/ExcelToCsvToDb/setting.ini new file mode 100644 index 0000000..0c000ff --- /dev/null +++ b/src/ExcelToCsvToDb/setting.ini @@ -0,0 +1,390 @@ +[ExcelToSqlChuzo] +Title=ExcelSQL ivю捞pj +001=ExcelToCsv_Eazy(ExcelToSqlChuzoIni) +[ExcelToCsvPoSp] +Title=ExcelCSV iPOhSPv捞j +001=ExcelToCsv_Eazy(ExcelToCsvPoSpIni) +;002=CsvToDb(CsvToDbEazyIni) +;002=SFTPUpload(SFTPUploadIni) +;003=Cleanup(CleanupAfterUploadIni) +[ExcelToCsvWeOrderMc] +Title=ExcelCSV inډHf[^Agc[FSj +001=ExcelToCsv_WeOrder(ExcelToCsvIniMc) +002=SFTPUpload(SFTPUploadIni) +003=Cleanup(CleanupAfterUploadIni) +[ExcelToCsvWeOrderAlumi] +Title=ExcelCSV inډHf[^Agc[FA~j +001=ExcelToCsv_WeOrder(ExcelToCsvAlumiIni) +002=SFTPUpload(SFTPUploadIni) +003=Cleanup(CleanupAfterUploadIni) +[ExcelToCsvWeOrderNew001] +Title=ExcelCSV inډHf[^Agc[FVn1Cj +001=ExcelToCsv_WeOrder(ExcelToCsvWeNew001Ini) +002=SFTPUpload(SFTPUploadIni) +003=Cleanup(CleanupAfterUploadIni) +[ExcelToCsvWeOrderNewFormat] +Title=ExcelCSV inډHf[^Agc[FExcelVʏj +001=ExcelToCsv_WeOrder(ExcelToCsvWeNewFormatIni) +;002=SFTPUpload(SFTPUploadIni) +;003=Cleanup(CleanupAfterUploadIni) + +; +[ExcelToSqlChuzoIni] +DaysToStartOffset=0 +DaysToEndOffset=30 +InFolderPath=C:\CSV\Chuzo + +;FileNamePattern=*.xlsm +;̂PiHPDCj +;FileNamePattern=*y**zYǗ* ŐV.xlsm +;̂Qi㉺j@BHMA1iA~j +;FileNamePattern=*y**z㉺Hv.xlsx +;̂RiLPDCj +;FileNamePattern=*_FMsuperYǗ\_ver*.xlsm +;̂SiGDCj +FileNamePattern=**-*dグv.xlsx + + +;ȉExcelɈړI +;IncludedSheetNames=YǗ +;ExcludedSheetNames=쐬T,,ݒ?,Net&Loss,ݒ,WeDB,CostDB,Yv?,,AFv,SPv,CKD,SPDB,?,Planning,eC? +;ExcelSheetCheckItems=C4,M/C|D4,@|E4,ғ + +;ExcelLineJudgeCol=B +;ExcelLineJudgeValue=C +;ExcelLineKeyCell=C5 +;ExcelLineKeyValuePair=20,1|16,1|14,1|17,1|19,1|7,1 +ExcelFileNamePatternToLine=*.xlsx,1|*y**zYǗ* ŐV.xlsm,2|*y**z㉺Hv.xlsx,3|*_FMsuperYǗ\_ver*.xlsm,4|**-*dグv.xlsx,5 +ExcelSettingFileByLineId=1,.\C`\CP.xlsx|2,.\C`\CQ.xlsx|3,.\C`\CR.xlsx|4,.\C`\CS.xlsx|5,.\C`\CT.xlsx + +;ȉExcelɈړI +;ExcelDateYMGetMode=FromDateCell + +;ExcelNenGetsuCellAddress=D2 + +;ȉExcelɈړI +;ExcelDateRowMode=Fixed +;ExcelDateRow=888 +;;ExcelDateRowJudgeValue=t +;ExcelDateRowStartCol=V +;ExcelDateRowEndValue= + +;ExcelSkipSameMonthSheets=false + +;ȉExcelɈړI +;ExcelHiddenRowHandling=skip +;ExcelDataStartRowJudgeCol=C +;ExcelDataStartRowJudgeValues=M/C +;ExcelDataEndJudgeCol=M +;ExcelDataEndJudgeValue=,10 +;ExcelMcSeisanFukaEnabled=false + +;ExcelMcSeisanFukaJudgeCol=B +;ExcelMcSeisanFukaJudgeValuePattern=*Y* +;ExcelAfWeCol=B + +;ȉExcelɈړI +;ExcelRowKindCol=M +;ExcelRowKindTargets=v, + +;ExcelItemNameAndColumnLetterMapping=BasicPartsNo:B|ModelCd:|Derivation:C|TactTime:D +;Col001=PlanCd:"K*SP**" +;Col002=HaraiMoto:"PO" +;Col003=HaraiSaki:B +;Col004=ModelCd:Substring(C,1,3) +;Col005=SeppenBuban:D +;Col006=TargetColor:E +;Col007=KakoColor:F +;Col008=Biko:G +;Col009=Buhinmei:H +;Col010=KoteiCd:ϊl,AI,1=1521,2=1521,3=1521,4=1521,5=1521,=1513 +;Col011=SeisanHiduke:t +;Col012=Daisu: +;Col013=SpBuban:Replace(AN,"-","") + +;̂PiHPDCj +;Col001=ModuleId:W[ID +;Col002=LineId:CID +;Col003=ProcessGroup:ϊl,C,14=2,16=3,20=4,17=117,19=119,7=107 +;Col004=PartNo:t@Cϊl,D,PartNo.tsv +;Col005=ProductionDate:t +;Col006=PlanQty:(M,v) +;Col007=ActualQty:(M,) + +;ExcelLinesOnSheet=1 +;ExcelShimukeTactRowZure=1 +;ExcelKihonBubanGyosu=2 +;OutputTypeCSViftHgjor FormattedText +;OutputType=FormattedText +OutputType=CSV +FormattedTextFormatFile=PlanQty,@@@NOT_EMPTY@@@,KeikakuFormat.txt|JissekiFormat.txt +OutFolderPath=C:\Output\Chuzo +CsvFileName=Chuzo +FileDtPrefix=yyyyMMdd-HHmmss_ +FileDtSuffix=_yyyyMMdd_HHmmss +CsvEncoding=UTF-8 With BOM +[ExcelToCsvPoSpIni] +DaysToStartOffset=1 +InFolderPath=C:\CSV\PoSp +FileNamePattern=*.xlsx +IncludedSheetNames=SPv() +;ExcludedSheetNames=쐬T,,ݒ?,Net&Loss,ݒ,WeDB,CostDB,Yv?,,AFv,SPv,CKD,SPDB,?,Planning,eC? +ExcelSheetCheckItems=E2,rov[]|A5,lj|B5,o|C5,@|D5,ݕϕ|E5,TARGETF|F5,HF|G5,l|H5,i|I5,TOTAL +;ExcelLineJudgeCol=B +;ExcelLineJudgeValue=C +ExcelDateYMGetMode=TargetCellDate +ExcelNenGetsuCellAddress=D2 +ExcelDateRowMode=Fixed +ExcelDateRow=5 +;ExcelDateRowJudgeValue=t +ExcelDateRowStartCol=J +ExcelDateRowEndValue=W +ExcelSkipSameMonthSheets=false +ExcelHiddenRowHandling=skip +ExcelDataStartRowJudgeCol=C +ExcelDataStartRowJudgeValues=@ +ExcelDataEndJudgeCol=D +ExcelDataEndJudgeValue= +ExcelMcSeisanFukaEnabled=false +;ExcelMcSeisanFukaJudgeCol=B +;ExcelMcSeisanFukaJudgeValuePattern=*Y* +ExcelAfWeCol=B +ExcelItemNameAndColumnLetterMapping=BasicPartsNo:B|ModelCd:|Derivation:C|TactTime:D +Col001=PlanCd:"K*SP**" +Col002=HaraiMoto:"PO" +Col003=HaraiSaki:B +Col004=ModelCd:Substring(C,1,3) +Col005=SeppenBuban:D +Col006=TargetColor:E +Col007=KakoColor:F +Col008=Biko:G +Col009=Buhinmei:H +Col010=KoteiCd:ϊl,AI,1=1521,2=1521,3=1521,4=1521,5=1521,=1513 +Col011=SeisanHiduke:t +Col012=Daisu: +Col013=SpBuban:Replace(AN,"-","") +ExcelLinesOnSheet=1 +ExcelShimukeTactRowZure=1 +ExcelKihonBubanGyosu=2 +OutFolderPath=C:\CSV\PoSp +CsvFileName=PoSpPlan +FileDtPrefix=yyyyMMdd-HHmmss_ +FileDtSuffix=_yyyyMMdd_HHmmss +CsvEncoding=UTF-8 With BOM +[ExcelToCsvIniMc] +DaysToStartOffset=1 +InFolderPath=C:\CSV\nډHv +;FileNamePattern=*Yv*.xlsx +FileNamePattern=*V*.xlsx +NameToIdListForLine=MC,57|}`,58 +ExcelSheetCheckItems=D2[or]D1,C|E2[or]E1,Vtg|D5[or]C5,@R[h[or]R[h|E5,d|F5,^Ng|G5,t +ExcelLineJudgeCol=D +ExcelLineJudgeValue=C +ExcelDateRowMode=Fixed +ExcelDateRow=5 +ExcelDateRowStartCol=H +ExcelDateRowEndValue=TOTAL +;ExcelDateYMGetMode=FromYMCells +ExcelDateYMGetMode=FromDateCell +ExcelHiddenRowHandling=skip +ExcelDataStartRowJudgeCol=D +ExcelDataStartRowJudgeValues=R[h,@,@R[h,{ +ExcelDataEndJudgeCol=G +ExcelDataEndJudgeValue= +ExcelMcSeisanFukaEnabled=true +ExcelMcSeisanFukaJudgeCol=B +ExcelMcSeisanFukaJudgeValuePattern=*Y* +ExcelAfWeCol=G +;ExcelItemNameAndColumnLetterMapping=BasicPartsNo:D|ModelCd:C|Derivation:E|TactTime:F +OutFolderPath=C:\CSV\nډHv +CsvFileName=WeOrder +FileDtPrefix=yyyyMMdd-HHmmss_ +FileDtSuffix=_yyyyMMdd_HHmmss +;CsvEncoding=UTF-8 With BOM +[ExcelToCsvAlumiIni] +DaysToStartOffset=1 +InFolderPath=C:\CSV\nډHv +NameToIdListForLine=FWL/NO2,78 +FileNamePattern=*A~*.xlsx +IncludedSheetNames=FWL +;IncludedSheetNamesw肳ĂƂł +;ExcludedSheetNames=SUB,COM +;IncludedLineNames=FWL/NO2 +;IncludedSheetNamesw肳ĂƂł +;ExcludedLineNames=SUB,COM +ExcelSheetCheckItems=A3,YEAR|B3,MONTH|C3,C|G4[or]K4,Yv|A7[or]A8,|G7[or]G8,t|G8[or]G9, +ExcelLineJudgeCol=C +ExcelLineJudgeValue=C +ExcelDateYMGetMode=FromYMCells +;ExcelDateYMGetMode=FromDateCell +ExcelDateYearCell=A4 +ExcelDateMonthCell=B4 +ExcelDateRowMode=Judge +ExcelDateRow=5 +ExcelDateRowJudgeCol=G +ExcelDateRowJudgeValue=t +ExcelDateRowStartCol=H +ExcelDateRowEndValue= +ExcelHiddenRowHandling=skip +ExcelDataStartRowJudgeCol=G +ExcelDataStartRowJudgeValues= +ExcelDataEndJudgeCol=A +ExcelDataEndJudgeValue=*TOTAL* +ExcelMcSeisanFukaEnabled=false +ExcelMcSeisanFukaJudgeCol=B +ExcelMcSeisanFukaJudgeValuePattern=*Y* +ExcelAfWeCol=G +ExcelItemNameAndColumnLetterMapping=BasicPartsNo:A|ModelCd:A|Derivation:F|TactTime:ZZ +OutFolderPath=C:\CSV\nډHv +CsvFileName=WeOrder +FileDtPrefix=yyyyMMdd-HHmmss_ +FileDtSuffix=_yyyyMMdd_HHmmss +;CsvEncoding=UTF-8 With BOM +[ExcelToCsvWeNew001Ini] +DaysToStartOffset=1 +InFolderPath=C:\CSV\nډHv +NameToIdListForLine=SC1,101|n1C,102 +FileNamePattern=*n1C*.xlsx +IncludedLineNames=SC1,n1C +;ExcludedSheetNames=2025.12@,2025.11@6H +ExcelSheetCheckItems=D2,C|E2,Vtg|D5,@R[h|E5,d|F5,^Ng|G5,t +ExcelLineJudgeCol=D +ExcelLineJudgeValue=C +ExcelDateYMGetMode=FromDateCell +ExcelDateRowMode=Judge +ExcelDateRowJudgeCol=G +ExcelDateRowJudgeValue=t +ExcelDateRowStartCol=H +ExcelDateRowEndValue=TOTAL +ExcelSkipSameMonthSheets=true +ExcelHiddenRowHandling=skip +ExcelDataStartRowJudgeCol=D +ExcelDataStartRowJudgeValues=@ +ExcelDataEndJudgeCol=B +ExcelDataEndJudgeValue=*TOTAL䐔* +ExcelMcSeisanFukaEnabled=true +ExcelMcSeisanFukaJudgeCol=B +ExcelMcSeisanFukaJudgeValuePattern=*Y* +ExcelAfWeCol=G +ExcelItemNameAndColumnLetterMapping=BasicPartsNo:D|ModelCd:C|Derivation:E|TactTime:F +OutFolderPath=C:\CSV\nډHv +CsvFileName=WeOrder001 +FileDtPrefix=yyyyMMdd-HHmmss_ +FileDtSuffix=_yyyyMMdd_HHmmss +;CsvEncoding=UTF-8 With BOM +[ExcelToCsvWeNewFormatIni] +DaysToStartOffset=1 +InFolderPath=C:\CSV\Vʏ +NameToIdListForLine=MC,101|n1,102|}`,103|50@,104|RF@@@COMMA@@@S/A,105|T/T,106 +FileNamePattern=*.xlsm +IncludedLineNames=MC,n1,}`,50@,RF@@@COMMA@@@S/A,T/T +ExcludedSheetNames=쐬T,,ݒ?,Net&Loss,ݒ,WeDB,CostDB,Yv?,,AFv,SPv,CKD,SPDB,?,Planning,eC? +ExcelSheetCheckItems=B2,C|C2,Vtg|B5,t[|C5,敪|D5,^Ng|E5,t +ExcelLineJudgeCol=B +ExcelLineJudgeValue=C +ExcelDateYMGetMode=FromDateCell +ExcelDateRowMode=Judge +ExcelDateRowJudgeCol=E +ExcelDateRowJudgeValue=t +ExcelDateRowStartCol=F +ExcelDateRowEndValue=TOTAL +ExcelSkipSameMonthSheets=false +ExcelHiddenRowHandling=skip +ExcelDataStartRowJudgeCol=B +ExcelDataStartRowJudgeValues=t[ +ExcelDataEndJudgeCol=B +ExcelDataEndJudgeValue=*TOTAL䐔* +ExcelMcSeisanFukaEnabled=true +ExcelMcSeisanFukaJudgeCol=B +ExcelMcSeisanFukaJudgeValuePattern=*Y* +ExcelAfWeCol=E +ExcelItemNameAndColumnLetterMapping=BasicPartsNo:B|ModelCd:ʃV[g,WeDB,D,B,5|Derivation:C|TactTime:D +ExcelLinesOnSheet=1 +ExcelShimukeTactRowZure=1 +ExcelKihonBubanGyosu=2 +OutFolderPath=C:\CSV\Vʏ +CsvFileName=WeOrderNewFormat +FileDtPrefix=yyyyMMdd-HHmmss_ +FileDtSuffix=_yyyyMMdd_HHmmss +;CsvEncoding=UTF-8 With BOM +[SFTPUploadIni] +Host={[SFTP]Host} +Port={[SFTP]Port} +UserName={[SFTP]UserName} +PrivateKeyFilePath={[SFTP]PrivateKeyFilePath} +PassPhrase={[SFTP]PassPhrase} +RemotePath={[SFTP]RemotePath} +InFolderPath=C:\CSV\Vʏ +FileNamePatterns={[CSV]FileNamePatterns} +[CleanupAfterUploadIni] +FolderPath=C:\CSV\DL +MaxDays=90 +MaxFileCount=100 +[CsvToDbWeOrder] +Title=CSVDB +;001=SFTPDownload(SFTPDownloadIni) +002=CsvToDb(CsvToDbIni) +;003=SFTPDelete(SFTPDeleteIni) +;004=Backup(BackupIni) +[SFTPDownloadIni] +Host={[SFTP]Host} +Port={[SFTP]Port} +UserName={[SFTP]UserName} +PrivateKeyFilePath={[SFTP]PrivateKeyFilePath} +PassPhrase={[SFTP]PassPhrase} +RemotePath={[SFTP]RemotePath} +OutFolderPath=C:\CSV\DL +FileNamePatterns={[CSV]FileNamePatterns} +[CsvToDbIni] +SqlFolderPath=SQL +DaysToStartOffset=1 +CsvFileNamePatterns={[CSV]FileNamePatterns} +CsvFolderPath=C:\CSV\DL +;CsvEncoding=UTF-8 With BOM +DbProviderName=|XO +DbConnectionString=Host=localhost;Port=5432;Database=postgres;Username=postgres;Password=sfsadmin +DeleteBeforeInsertSqlFiles=DeleteBeforeInsertWeOrder +InsertProcessingMode=Bulk +InsertSqlFiles=InsertWeOrder +DupCheckSqlFiles= +SqlNameInsertBulk=InsertWeOrderBulk +[CsvToDbEazyIni] +SqlFolderPath=SQL +DaysToStartOffset=1 +CsvFileNamePatterns=*.csv +CsvFolderPath=C:\CSV\PoSp +;CsvEncoding=UTF-8 With BOM +DbProviderName=|XO +DbConnectionString=Host=localhost;Port=5432;Database=postgres;Username=postgres;Password=sfsadmin +DeleteBeforeInsertSqlFiles=DeleteBeforeInsertEazy +InsertSqlFiles=InsertEazy +DupCheckSqlFiles= +[SFTPDeleteIni] +Host={[SFTP]Host} +Port={[SFTP]Port} +UserName={[SFTP]UserName} +PrivateKeyFilePath={[SFTP]PrivateKeyFilePath} +PassPhrase={[SFTP]PassPhrase} +RemotePath={[SFTP]RemotePath} +FileNamePatterns={[CSV]FileNamePatterns} +[BackupIni] +SourceFolderPath=C:\CSV\DL +DestinationFolderPath=C:\CSV\DL\Backup001 +FileNamePatterns={[CSV]FileNamePatterns} +MaxDays=30 +MaxFileCount=30 +PrefixDtFormat=yyyy-MM-dd-HH-mm-ss_ +SuffixDtFormat=_yyyyMMddHHmmss +[Logging] +LogLevel=Information +LogFilePath=Log\ExcelToCsvToDbLog.log +RollingInterval=Month +[SFTP] +Host=172.23.231.166 +Port=22 +UserName=noboru +PrivateKeyFilePath=C:\Users\jpa01378\id_rsa_dotnet +PassPhrase=uI14MRtLpR7iLxWvaTGFfw== +RemotePath=bbb +[CSV] +FileNamePatterns=*WeOrder*.csv \ No newline at end of file diff --git a/src/ExcelToCsvToDbCommon/Class/ColumnDefinition.cs b/src/ExcelToCsvToDbCommon/Class/ColumnDefinition.cs new file mode 100644 index 0000000..446ddfc --- /dev/null +++ b/src/ExcelToCsvToDbCommon/Class/ColumnDefinition.cs @@ -0,0 +1,269 @@ +using KssSmaPlaLib.Ini; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.ComponentModel.DataAnnotations; +using System.Drawing.Design; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ExcelToCsvToDbCommon.Class +{ + public enum ColumnType + { + Fixed, + Mapping, + Conversion, + HorizontalDate, + ValueAmount, + FuncReplace, + FuncSubstring, + LineId, + FileConversion, + ModuleId, + } + + [TypeConverter(typeof(ExpandableObjectConverter))] // これで [+] で展開可能に! + [Editor(typeof(ColumnDefinitionEditor), typeof(UITypeEditor))] + public class ColumnDefinition + { + [ReadOnly(true), DisplayName("論理名")] + public string LogicalName { get; set; } = string.Empty; // PlanCd, KoteiCdなど + [ReadOnly(true), DisplayName("タイプ")] + public ColumnType Type { get; set; } // 処理タイプ + + public string TypeName + { + get + { + return GetTypeName(this.Type); + } + } + + [ReadOnly(true), DisplayName("列(A-Z)")] + public string TargetCol { get; set; } = string.Empty; // B, C, ANなどの列レター + [ReadOnly(true), DisplayName("固定値/条件")] + public string FixedValue { get; set; } = string.Empty; // 固定値 or 変換条件など + + [ReadOnly(true), DisplayName("変換表")] + public Dictionary ConvertMap { get; set; } // 変換テーブル + + public string Comment { get; set; } = string.Empty; + public string Naiyo + { + get + { + switch(this.Type) + { + case ColumnType.Fixed: + return $"固定値 \"{this.FixedValue}\" を出力します。"; + case ColumnType.Mapping: + return $"列 [{this.TargetCol}] の値を出力します。"; + case ColumnType.Conversion: + var henkanhyo = string.Join(",", this.ConvertMap.Select(m => m.Key + ":" + m.Value).ToList()); + return $"列 [{this.TargetCol}] の値を変換して出力します。({henkanhyo})"; + case ColumnType.FuncReplace: + return $"列 [{this.TargetCol}] の値を部分置換して出力します。({this.FixedValue})"; + case ColumnType.FuncSubstring: + return $"列 [{this.TargetCol}] の値を部分切り取りして出力します。({this.FixedValue.Split(',')[0]}桁目から{this.FixedValue.Split(',')[1]}桁)"; + case ColumnType.HorizontalDate: + return $"横並びのカレンダ日付を出力します。"; + case ColumnType.ValueAmount: + return $"その日の払出し数を出力します。"; + default: + return $"(未登録)"; + } + } + } + + public string IniRaw() + { + var raw = this.LogicalName + ":"; + switch (this.Type) + { + case ColumnType.Fixed: + raw += $"\"{this.FixedValue}\""; + break; + case ColumnType.Mapping: + raw += this.TargetCol; + break; + case ColumnType.Conversion: + var kvpCsv = string.Join(",", this.ConvertMap.Select(m => m.Key + "=" + m.Value).ToList()); + raw += "変換値," + this.TargetCol + "," + kvpCsv; + break; + case ColumnType.HorizontalDate: + raw += "横日付"; + break; + case ColumnType.ValueAmount: + raw += "数"; + break; + case ColumnType.FuncReplace: + raw += "Replace(" + this.TargetCol + "," + this.FixedValue.Replace("→",",") + ")"; + break; + case ColumnType.FuncSubstring: + raw += "Substring(" + this.TargetCol + "," + this.FixedValue + ")"; + break; + } + return raw; + } + + // PropertyGrid上に「何の設定か」を一言で表示する + public override string ToString() => $"{LogicalName} ({Type})"; + + public static string GetCsvHeader(List cdList) + { + // ガード句:リストが空なら空文字を返す + if (cdList == null || cdList.Count == 0) return string.Empty; + + // LogicalNameをカンマで連結して一行のヘッダー文字列を作成 + return string.Join(",", cdList.Select(c => c.LogicalName)); + } + + public static List Load(string iniPath, string sectionName) + { + var cdList = new List(); + for (int cnt = 1; cnt < 1000; cnt++) + { + var rawValue = IniHelper.ReadValue(iniPath, sectionName, $"Col{cnt:d3}", string.Empty); + if (string.IsNullOrEmpty(rawValue)) break; + cdList.Add(Parse(rawValue, out var messageForMe)); + } + var comments = IniHelper.ReadValue(iniPath, sectionName, "ColComments", string.Empty); + if (!string.IsNullOrEmpty(comments)) + { + var ary = comments.Split(','); + for (var cnt = 0; cnt < Math.Min(cdList.Count, ary.Length); cnt++) + { + cdList[cnt].Comment = ary[cnt].Replace("@@@COMMA@@@", ","); + } + } + return cdList; + } + + /// + /// INI記載値のバリデとnew + /// + /// + /// + /// + public static ColumnDefinition Parse(string rawValue,out string resultMessage) + { + resultMessage = string.Empty; + try + { + // 例: Col001=PlanCd:"K*SP**" -> LogicalName="PlanCd", body="\"K*SP**\"" + var parts = rawValue.Split(new[] { ':' }, 2); + var def = new ColumnDefinition { LogicalName = parts[0] }; + string body = parts[1]; + + // 1. 固定値判定 (ダブルクォーテーションで囲まれている) + if (body.StartsWith("\"") && body.EndsWith("\"")) + { + def.Type = ColumnType.Fixed; + def.FixedValue = body.Trim('\"'); + } + // 1.5. ラインID + else if (body == "ラインID") + { + def.Type = ColumnType.LineId; + } + // 1.6. モジュールID + else if (body == "モジュールID") + { + def.Type = ColumnType.ModuleId; + } + // 2. 関数判定 (Replaceなどが含まれる) + else if (body.Contains("Replace(")) + { + def.Type = ColumnType.FuncReplace; + // 後で正規表現などでANや"-"を引っこ抜く + var ary = (body.Replace("Replace(", "").Trim(')').Trim() + ",,").Split(','); + def.TargetCol = ary[0].Trim(); + def.FixedValue = ary[1].Trim() + "→" + ary[2].Trim(); + } + else if (body.Contains("Substring(")) + { + def.Type = ColumnType.FuncSubstring; + // 後で正規表現などでANや"-"を引っこ抜く + var ary = (body.Replace("Substring(", "").Trim(')').Trim() + ",,").Split(','); + def.TargetCol = ary[0].Trim(); + def.FixedValue = ary[1].Trim() + "," + ary[2].Trim(); + } + // 3. 変換値判定 (カンマ区切りで"変換値"とある) + else if (body.StartsWith("変換値")) + { + def.Type = ColumnType.Conversion; + var csv = body.Split(','); + def.TargetCol = csv[1]; // B列など + def.ConvertMap = csv.Skip(2).Select(s => s.Split('=')).ToDictionary(a => a[0], a => a[1]); + } + // 3.1 ファイル変換値判定 (カンマ区切りで"ファイル変換値"とある) + else if (body.StartsWith("ファイル変換値")) + { + def.Type = ColumnType.FileConversion; + var csv = body.Split(','); + def.TargetCol = csv[1]; // B列など + var path = csv[2]; + if (path.IndexOf("\\") < 0) path = ".\\" + path; + var dic = new Dictionary(); + if (!string.IsNullOrEmpty(path) && File.Exists(path)) + { + using (var sr = new StreamReader(path)) + { + var all = sr.ReadToEnd(); + var lines = all.Replace("\r\n", "\n").Replace("\r", "\n").Split('\n'); + foreach (var line in lines) + { + if (string.IsNullOrEmpty(line)) continue; + var items = line.Split('\t'); + dic.Add(items[0], items[1]); + } + } + } + def.ConvertMap = dic; + } + // 4. 特殊主役判定 (横日付・数) + else if (body == "横日付") def.Type = ColumnType.HorizontalDate; + else if (body == "数") def.Type = ColumnType.ValueAmount; + // 4.1 特殊主役判定 (数(...)) + else if (body.StartsWith("数(")) + { + def.Type = ColumnType.ValueAmount; + var csv = body.Substring(2).TrimEnd(')').Split(','); + def.TargetCol = csv[0].Trim(); + def.FixedValue = csv[1].Trim(); + } + // 5. 単純マッピング + else + { + def.Type = ColumnType.Mapping; + def.TargetCol = body; // D列など + } + return def; + } + catch (Exception ex) + { + resultMessage = ex.Message; + return null; + } + } + public static string GetTypeName(ColumnType type) + { + switch (type) + { + case ColumnType.Fixed: return "固定値"; + case ColumnType.Mapping: return "セル値"; + case ColumnType.Conversion: return "変換値"; + case ColumnType.FuncReplace: return "置換値"; + case ColumnType.FuncSubstring: return "部分切り取り値"; + case ColumnType.HorizontalDate: return "横日付"; + case ColumnType.ValueAmount: return "数"; + case ColumnType.LineId: return "ラインID"; + case ColumnType.ModuleId: return "モジュールID"; + default: return "(設定なし)"; + } + } + } +} diff --git a/src/ExcelToCsvToDbCommon/Class/ColumnDefinitionEditor.cs b/src/ExcelToCsvToDbCommon/Class/ColumnDefinitionEditor.cs new file mode 100644 index 0000000..4295ebd --- /dev/null +++ b/src/ExcelToCsvToDbCommon/Class/ColumnDefinitionEditor.cs @@ -0,0 +1,153 @@ +using ExcelToCsvToDbCommon.Gamen; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing.Design; +using System.Linq; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Windows.Forms.Design; +using System.Xml.Serialization; + +namespace ExcelToCsvToDbCommon.Class +{ + public class ColumnDefinitionEditor : UITypeEditor + { + // 編集スタイルを「モーダルダイアログ」に指定 + public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) + { + return UITypeEditorEditStyle.Modal; + } + + // [...]ボタンが押された(またはダブルクリックされた)時の処理 + public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) + { + var svc = provider?.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService; + var org = value as ColumnDefinition; + var edited = new ColumnDefinition(); + + if (svc != null && org != null) + { + if (org.Type == ColumnType.Fixed && + string.IsNullOrEmpty(org.FixedValue)) + { + // 新規の場合、タイプを選択する + using (var frm = new TypeSelectForm()) + { + if (frm.ShowDialog() == DialogResult.Cancel) return org; + + edited.Type = frm.Type; + } + } + else + { + edited.Type = org.Type; + } + + // まず論理名とテーブルカラム名 + using (var frm = new NameForm(org.LogicalName)) + { + if (frm.ShowDialog() == DialogResult.Cancel) return org; + + edited.LogicalName = frm.LogicalName; + } + + switch (edited.Type) + { + case ColumnType.Fixed: + // ★ここで自作の「編集用フォーム」を呼び出す! + // configのコピーを渡して、OKなら反映させるのが安全です + using (var frm = new ColFixedForm(org.FixedValue)) + { + if (svc.ShowDialog(frm) == DialogResult.Cancel) + { + return org; + } + edited.FixedValue = frm.Koteichi; + } + break; + + case ColumnType.Mapping: + // ★ここで自作の「編集用フォーム」を呼び出す! + // configのコピーを渡して、OKなら反映させるのが安全です + using (var frm = new ColMappingForm(org.TargetCol)) + { + if (svc.ShowDialog(frm) == DialogResult.Cancel) + { + return org; + } + edited.TargetCol = frm.Retsu; + } + break; + + case ColumnType.Conversion: + // 列選択 + using (var frm = new ColMappingForm(org.TargetCol)) + { + if (svc.ShowDialog(frm) == DialogResult.Cancel) + { + return org; + } + edited.TargetCol = frm.Retsu; + } + // 変換値 + using (var frm = new ColKeyValueListForm(org.ConvertMap)) + { + if (svc.ShowDialog(frm) == DialogResult.Cancel) + { + return org; + } + edited.ConvertMap = frm.keyValuePairs; + } + break; + case ColumnType.HorizontalDate: + // 何もしない + edited.Type = ColumnType.HorizontalDate; + break; + case ColumnType.ValueAmount: + // 何もしない + edited.Type = ColumnType.ValueAmount; + break; + case ColumnType.FuncReplace: + // 列選択 + using (var frm = new ColMappingForm(org.TargetCol)) + { + if (svc.ShowDialog(frm) == DialogResult.Cancel) + { + return org; + } + edited.TargetCol = frm.Retsu; + } + break; + + case ColumnType.FuncSubstring: + // 列選択 + using (var frm = new ColMappingForm(org.TargetCol)) + { + if (svc.ShowDialog(frm) == DialogResult.Cancel) + { + return org; + } + edited.TargetCol = frm.Retsu; + } + + //途中でやめた!(笑)🔥🌊 + //// 置換値 + //using (var frm = new ColReplaceForm(org.ConvertMap)) + //{ + // if (svc.ShowDialog(frm) == DialogResult.Cancel) + // { + // return org; + // } + // edited.ConvertMap = frm.keyValuePairs; + //} + break; + } + return edited; // 編集後のデータを返す + } + return org; + } + } +} \ No newline at end of file diff --git a/src/ExcelToCsvToDbCommon/Class/IniConfigContainer.cs b/src/ExcelToCsvToDbCommon/Class/IniConfigContainer.cs new file mode 100644 index 0000000..b291937 --- /dev/null +++ b/src/ExcelToCsvToDbCommon/Class/IniConfigContainer.cs @@ -0,0 +1,19 @@ +using ExcelToCsvToDbCommon.Class; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ReiaSanTool.Class +{ + public class IniConfigContainer + { + // [Category] や [DisplayName] で見た目を整える + [Category("設定")] + [DisplayName("列定義リスト")] + [Description("ここをクリックして右側の [...] ボタンを押すと、項目の追加・移動・削除ができます")] + public BindingList Columns { get; set; } = new BindingList(); + } +} diff --git a/src/ExcelToCsvToDbCommon/ExcelToCsvToDbCommon.csproj b/src/ExcelToCsvToDbCommon/ExcelToCsvToDbCommon.csproj new file mode 100644 index 0000000..02c9041 --- /dev/null +++ b/src/ExcelToCsvToDbCommon/ExcelToCsvToDbCommon.csproj @@ -0,0 +1,115 @@ + + + + + Debug + AnyCPU + {9F267A81-8387-46F7-A299-CFC26216F895} + Library + Properties + ExcelToCsvToDbCommon + ExcelToCsvToDbCommon + v4.8 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + Form + + + ColFixedForm.cs + + + Form + + + ColKeyValueListForm.cs + + + Form + + + ColMappingForm.cs + + + Form + + + ColReplaceForm.cs + + + Form + + + NameForm.cs + + + Form + + + TypeSelectForm.cs + + + + + + ColFixedForm.cs + + + ColKeyValueListForm.cs + + + ColMappingForm.cs + + + ColReplaceForm.cs + + + NameForm.cs + + + TypeSelectForm.cs + + + + + {4136CE96-10AA-4B55-B49F-68C80E9E3BC8} + KssSmaPlaLib + + + + \ No newline at end of file diff --git a/src/ExcelToCsvToDbCommon/Gamen/ColFixedForm.Designer.cs b/src/ExcelToCsvToDbCommon/Gamen/ColFixedForm.Designer.cs new file mode 100644 index 0000000..19160c1 --- /dev/null +++ b/src/ExcelToCsvToDbCommon/Gamen/ColFixedForm.Designer.cs @@ -0,0 +1,93 @@ +namespace ExcelToCsvToDbCommon.Gamen +{ + partial class ColFixedForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.KoteichiText = new System.Windows.Forms.TextBox(); + this.CancelButton2 = new System.Windows.Forms.Button(); + this.OkButton = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // KoteichiText + // + this.KoteichiText.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.KoteichiText.Location = new System.Drawing.Point(12, 12); + this.KoteichiText.Name = "KoteichiText"; + this.KoteichiText.Size = new System.Drawing.Size(532, 49); + this.KoteichiText.TabIndex = 0; + // + // CancelButton2 + // + this.CancelButton2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelButton2.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelButton2.Location = new System.Drawing.Point(367, 74); + this.CancelButton2.Name = "CancelButton2"; + this.CancelButton2.Size = new System.Drawing.Size(177, 48); + this.CancelButton2.TabIndex = 4; + this.CancelButton2.Text = "キャンセル"; + this.CancelButton2.UseVisualStyleBackColor = true; + // + // OkButton + // + this.OkButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.OkButton.Location = new System.Drawing.Point(281, 74); + this.OkButton.Name = "OkButton"; + this.OkButton.Size = new System.Drawing.Size(80, 48); + this.OkButton.TabIndex = 3; + this.OkButton.Text = "OK"; + this.OkButton.UseVisualStyleBackColor = true; + this.OkButton.Click += new System.EventHandler(this.OkButton_Click); + // + // ColFixedForm + // + this.AcceptButton = this.OkButton; + this.AutoScaleDimensions = new System.Drawing.SizeF(19F, 42F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(556, 134); + this.Controls.Add(this.CancelButton2); + this.Controls.Add(this.OkButton); + this.Controls.Add(this.KoteichiText); + this.Font = new System.Drawing.Font("メイリオ", 14F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + this.Name = "ColFixedForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "固定値"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox KoteichiText; + private System.Windows.Forms.Button CancelButton2; + private System.Windows.Forms.Button OkButton; + } +} \ No newline at end of file diff --git a/src/ExcelToCsvToDbCommon/Gamen/ColFixedForm.cs b/src/ExcelToCsvToDbCommon/Gamen/ColFixedForm.cs new file mode 100644 index 0000000..b218963 --- /dev/null +++ b/src/ExcelToCsvToDbCommon/Gamen/ColFixedForm.cs @@ -0,0 +1,31 @@ +using ExcelToCsvToDbCommon.Class; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ExcelToCsvToDbCommon.Gamen +{ + public partial class ColFixedForm : Form + { + public string Koteichi { get; set; } + + public ColFixedForm(string fixValue) + { + InitializeComponent(); + + KoteichiText.Text = fixValue; + } + + private void OkButton_Click(object sender, EventArgs e) + { + Koteichi = KoteichiText.Text; + DialogResult = DialogResult.OK; + } + } +} diff --git a/src/ExcelToCsvToDbCommon/Gamen/ColFixedForm.resx b/src/ExcelToCsvToDbCommon/Gamen/ColFixedForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/src/ExcelToCsvToDbCommon/Gamen/ColFixedForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/src/ExcelToCsvToDbCommon/Gamen/ColKeyValueListForm.Designer.cs b/src/ExcelToCsvToDbCommon/Gamen/ColKeyValueListForm.Designer.cs new file mode 100644 index 0000000..0b509f8 --- /dev/null +++ b/src/ExcelToCsvToDbCommon/Gamen/ColKeyValueListForm.Designer.cs @@ -0,0 +1,97 @@ +namespace ExcelToCsvToDbCommon.Gamen +{ + partial class ColKeyValueListForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.KeyValueListDgv = new System.Windows.Forms.DataGridView(); + this.CancelButton2 = new System.Windows.Forms.Button(); + this.OkButton = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.KeyValueListDgv)).BeginInit(); + this.SuspendLayout(); + // + // KeyValueListDgv + // + this.KeyValueListDgv.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.KeyValueListDgv.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.KeyValueListDgv.Location = new System.Drawing.Point(12, 12); + this.KeyValueListDgv.Name = "KeyValueListDgv"; + this.KeyValueListDgv.RowHeadersWidth = 62; + this.KeyValueListDgv.RowTemplate.Height = 27; + this.KeyValueListDgv.Size = new System.Drawing.Size(477, 194); + this.KeyValueListDgv.TabIndex = 0; + // + // CancelButton2 + // + this.CancelButton2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelButton2.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelButton2.Location = new System.Drawing.Point(312, 221); + this.CancelButton2.Name = "CancelButton2"; + this.CancelButton2.Size = new System.Drawing.Size(177, 48); + this.CancelButton2.TabIndex = 8; + this.CancelButton2.Text = "キャンセル"; + this.CancelButton2.UseVisualStyleBackColor = true; + // + // OkButton + // + this.OkButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.OkButton.Location = new System.Drawing.Point(226, 221); + this.OkButton.Name = "OkButton"; + this.OkButton.Size = new System.Drawing.Size(80, 48); + this.OkButton.TabIndex = 7; + this.OkButton.Text = "OK"; + this.OkButton.UseVisualStyleBackColor = true; + this.OkButton.Click += new System.EventHandler(this.OkButton_Click); + // + // ColKeyValueListForm + // + this.AcceptButton = this.OkButton; + this.AutoScaleDimensions = new System.Drawing.SizeF(19F, 42F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(501, 281); + this.Controls.Add(this.CancelButton2); + this.Controls.Add(this.OkButton); + this.Controls.Add(this.KeyValueListDgv); + this.Font = new System.Drawing.Font("メイリオ", 14F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + this.Name = "ColKeyValueListForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "変換値"; + ((System.ComponentModel.ISupportInitialize)(this.KeyValueListDgv)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.DataGridView KeyValueListDgv; + private System.Windows.Forms.Button CancelButton2; + private System.Windows.Forms.Button OkButton; + } +} \ No newline at end of file diff --git a/src/ExcelToCsvToDbCommon/Gamen/ColKeyValueListForm.cs b/src/ExcelToCsvToDbCommon/Gamen/ColKeyValueListForm.cs new file mode 100644 index 0000000..f8ed136 --- /dev/null +++ b/src/ExcelToCsvToDbCommon/Gamen/ColKeyValueListForm.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ExcelToCsvToDbCommon.Gamen +{ + public partial class ColKeyValueListForm : Form + { + public Dictionary keyValuePairs; + + // フォーム側で保持 + private BindingList _bindingList; + + public ColKeyValueListForm(Dictionary kvpDic) + { + InitializeComponent(); + + if (kvpDic is null) kvpDic = new Dictionary(); + + _bindingList = new BindingList( + kvpDic.Select(x => new ConfigItem { Key = x.Key, Value = x.Value }).ToList() + ); + // バインド!これだけで画面と連動します + KeyValueListDgv.DataSource = _bindingList; + } + + private void OkButton_Click(object sender, EventArgs e) + { + keyValuePairs = _bindingList + .Where(x => !string.IsNullOrWhiteSpace(x.Key)) // 空のキーを除外 + .ToDictionary(x => x.Key, x => x.Value); + DialogResult = DialogResult.OK; + } + } + + // キーと値を持つシンプルなクラスを用意 + public class ConfigItem + { + public string Key { get; set; } + public string Value { get; set; } + } +} diff --git a/src/ExcelToCsvToDbCommon/Gamen/ColKeyValueListForm.resx b/src/ExcelToCsvToDbCommon/Gamen/ColKeyValueListForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/src/ExcelToCsvToDbCommon/Gamen/ColKeyValueListForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/src/ExcelToCsvToDbCommon/Gamen/ColMappingForm.Designer.cs b/src/ExcelToCsvToDbCommon/Gamen/ColMappingForm.Designer.cs new file mode 100644 index 0000000..74f0df2 --- /dev/null +++ b/src/ExcelToCsvToDbCommon/Gamen/ColMappingForm.Designer.cs @@ -0,0 +1,95 @@ +namespace ExcelToCsvToDbCommon.Gamen +{ + partial class ColMappingForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.RetsuCombo = new System.Windows.Forms.ComboBox(); + this.CancelButton2 = new System.Windows.Forms.Button(); + this.OkButton = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // RetsuCombo + // + this.RetsuCombo.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.RetsuCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.RetsuCombo.FormattingEnabled = true; + this.RetsuCombo.Location = new System.Drawing.Point(12, 12); + this.RetsuCombo.Name = "RetsuCombo"; + this.RetsuCombo.Size = new System.Drawing.Size(369, 50); + this.RetsuCombo.TabIndex = 0; + this.RetsuCombo.SelectedIndexChanged += new System.EventHandler(this.RetsuCombo_SelectedIndexChanged); + // + // CancelButton2 + // + this.CancelButton2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelButton2.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelButton2.Location = new System.Drawing.Point(204, 83); + this.CancelButton2.Name = "CancelButton2"; + this.CancelButton2.Size = new System.Drawing.Size(177, 48); + this.CancelButton2.TabIndex = 6; + this.CancelButton2.Text = "キャンセル"; + this.CancelButton2.UseVisualStyleBackColor = true; + // + // OkButton + // + this.OkButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.OkButton.Location = new System.Drawing.Point(118, 83); + this.OkButton.Name = "OkButton"; + this.OkButton.Size = new System.Drawing.Size(80, 48); + this.OkButton.TabIndex = 5; + this.OkButton.Text = "OK"; + this.OkButton.UseVisualStyleBackColor = true; + this.OkButton.Click += new System.EventHandler(this.OkButton_Click); + // + // ColMappingForm + // + this.AcceptButton = this.OkButton; + this.AutoScaleDimensions = new System.Drawing.SizeF(19F, 42F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(393, 143); + this.Controls.Add(this.CancelButton2); + this.Controls.Add(this.OkButton); + this.Controls.Add(this.RetsuCombo); + this.Font = new System.Drawing.Font("メイリオ", 14F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + this.Name = "ColMappingForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "列"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ComboBox RetsuCombo; + private System.Windows.Forms.Button CancelButton2; + private System.Windows.Forms.Button OkButton; + } +} \ No newline at end of file diff --git a/src/ExcelToCsvToDbCommon/Gamen/ColMappingForm.cs b/src/ExcelToCsvToDbCommon/Gamen/ColMappingForm.cs new file mode 100644 index 0000000..6975e87 --- /dev/null +++ b/src/ExcelToCsvToDbCommon/Gamen/ColMappingForm.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using static System.Windows.Forms.VisualStyles.VisualStyleElement; + +namespace ExcelToCsvToDbCommon.Gamen +{ + public partial class ColMappingForm : Form + { + public string Retsu { get; set; } + + public ColMappingForm(string retsu) + { + InitializeComponent(); + + // 例:AからZZ(702列)まで追加 + for (int i = 1; i <= 702; i++) + { + RetsuCombo.Items.Add(GetExcelColumnName(i)); + } + RetsuCombo.Text = retsu; // デフォルトで "A" を選択 + + RetsuCombo_SelectedIndexChanged(null, null); + } + + // 数値をExcel形式の列名(A, B... AA...)に変換するメソッド + private string GetExcelColumnName(int columnNumber) + { + string columnName = ""; + while (columnNumber > 0) + { + int modulo = (columnNumber - 1) % 26; + columnName = Convert.ToChar('A' + modulo) + columnName; + columnNumber = (columnNumber - modulo) / 26; + } + return columnName; + } + + private void RetsuCombo_SelectedIndexChanged(object sender, EventArgs e) + { + OkButton.Enabled = RetsuCombo.SelectedIndex != -1; + } + + private void OkButton_Click(object sender, EventArgs e) + { + this.Retsu = RetsuCombo.Text; + this.DialogResult = DialogResult.OK; + } + } +} diff --git a/src/ExcelToCsvToDbCommon/Gamen/ColMappingForm.resx b/src/ExcelToCsvToDbCommon/Gamen/ColMappingForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/src/ExcelToCsvToDbCommon/Gamen/ColMappingForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/src/ExcelToCsvToDbCommon/Gamen/ColReplaceForm.Designer.cs b/src/ExcelToCsvToDbCommon/Gamen/ColReplaceForm.Designer.cs new file mode 100644 index 0000000..cd60760 --- /dev/null +++ b/src/ExcelToCsvToDbCommon/Gamen/ColReplaceForm.Designer.cs @@ -0,0 +1,129 @@ +namespace ExcelToCsvToDbCommon.Gamen +{ + partial class ColReplaceForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.MaeText = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.AtoText = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.CancelButton2 = new System.Windows.Forms.Button(); + this.OkButton = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // MaeText + // + this.MaeText.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.MaeText.Location = new System.Drawing.Point(148, 12); + this.MaeText.Name = "MaeText"; + this.MaeText.Size = new System.Drawing.Size(352, 49); + this.MaeText.TabIndex = 0; + this.MaeText.TextChanged += new System.EventHandler(this.MaeText_TextChanged); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 15); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(130, 42); + this.label1.TabIndex = 1; + this.label1.Text = "置換前:"; + // + // AtoText + // + this.AtoText.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.AtoText.Location = new System.Drawing.Point(148, 67); + this.AtoText.Name = "AtoText"; + this.AtoText.Size = new System.Drawing.Size(352, 49); + this.AtoText.TabIndex = 2; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(12, 70); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(130, 42); + this.label2.TabIndex = 3; + this.label2.Text = "置換後:"; + // + // CancelButton2 + // + this.CancelButton2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelButton2.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelButton2.Location = new System.Drawing.Point(323, 131); + this.CancelButton2.Name = "CancelButton2"; + this.CancelButton2.Size = new System.Drawing.Size(177, 48); + this.CancelButton2.TabIndex = 8; + this.CancelButton2.Text = "キャンセル"; + this.CancelButton2.UseVisualStyleBackColor = true; + // + // OkButton + // + this.OkButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.OkButton.Location = new System.Drawing.Point(237, 131); + this.OkButton.Name = "OkButton"; + this.OkButton.Size = new System.Drawing.Size(80, 48); + this.OkButton.TabIndex = 7; + this.OkButton.Text = "OK"; + this.OkButton.UseVisualStyleBackColor = true; + this.OkButton.Click += new System.EventHandler(this.OkButton_Click); + // + // ColReplaceForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(19F, 42F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(512, 191); + this.Controls.Add(this.CancelButton2); + this.Controls.Add(this.OkButton); + this.Controls.Add(this.label2); + this.Controls.Add(this.AtoText); + this.Controls.Add(this.label1); + this.Controls.Add(this.MaeText); + this.Font = new System.Drawing.Font("メイリオ", 14F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + this.Name = "ColReplaceForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "置換"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox MaeText; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox AtoText; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button CancelButton2; + private System.Windows.Forms.Button OkButton; + } +} \ No newline at end of file diff --git a/src/ExcelToCsvToDbCommon/Gamen/ColReplaceForm.cs b/src/ExcelToCsvToDbCommon/Gamen/ColReplaceForm.cs new file mode 100644 index 0000000..905816d --- /dev/null +++ b/src/ExcelToCsvToDbCommon/Gamen/ColReplaceForm.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ExcelToCsvToDbCommon.Gamen +{ + public partial class ColReplaceForm : Form + { + public string Mae { get; set; } + public string Ato { get; set; } + + public ColReplaceForm(string mae, string ato) + { + InitializeComponent(); + + MaeText.Text = mae; + AtoText.Text = ato; + + MaeText_TextChanged(null, null); + } + + private void MaeText_TextChanged(object sender, EventArgs e) + { + OkButton.Enabled = !string.IsNullOrEmpty(MaeText.Text); + } + + private void OkButton_Click(object sender, EventArgs e) + { + Mae = MaeText.Text; + Ato = AtoText.Text; + DialogResult = DialogResult.OK; + } + } +} diff --git a/src/ExcelToCsvToDbCommon/Gamen/ColReplaceForm.resx b/src/ExcelToCsvToDbCommon/Gamen/ColReplaceForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/src/ExcelToCsvToDbCommon/Gamen/ColReplaceForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/src/ExcelToCsvToDbCommon/Gamen/NameForm.Designer.cs b/src/ExcelToCsvToDbCommon/Gamen/NameForm.Designer.cs new file mode 100644 index 0000000..3b714ee --- /dev/null +++ b/src/ExcelToCsvToDbCommon/Gamen/NameForm.Designer.cs @@ -0,0 +1,130 @@ +namespace ExcelToCsvToDbCommon.Gamen +{ + partial class NameForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.LogicalNameText = new System.Windows.Forms.TextBox(); + this.TableColumnName = new System.Windows.Forms.TextBox(); + this.CancelButton2 = new System.Windows.Forms.Button(); + this.OkButton = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(152, 15); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(130, 42); + this.label1.TabIndex = 0; + this.label1.Text = "論理名:"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(12, 70); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(270, 42); + this.label2.TabIndex = 1; + this.label2.Text = "テーブルカラム名:"; + // + // LogicalNameText + // + this.LogicalNameText.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.LogicalNameText.Location = new System.Drawing.Point(288, 12); + this.LogicalNameText.Name = "LogicalNameText"; + this.LogicalNameText.Size = new System.Drawing.Size(568, 49); + this.LogicalNameText.TabIndex = 2; + this.LogicalNameText.TextChanged += new System.EventHandler(this.LogicalNameText_TextChanged); + // + // TableColumnName + // + this.TableColumnName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.TableColumnName.Location = new System.Drawing.Point(288, 67); + this.TableColumnName.Name = "TableColumnName"; + this.TableColumnName.Size = new System.Drawing.Size(568, 49); + this.TableColumnName.TabIndex = 3; + // + // CancelButton2 + // + this.CancelButton2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelButton2.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelButton2.Location = new System.Drawing.Point(679, 133); + this.CancelButton2.Name = "CancelButton2"; + this.CancelButton2.Size = new System.Drawing.Size(177, 48); + this.CancelButton2.TabIndex = 5; + this.CancelButton2.Text = "キャンセル"; + this.CancelButton2.UseVisualStyleBackColor = true; + // + // OkButton + // + this.OkButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.OkButton.Location = new System.Drawing.Point(508, 133); + this.OkButton.Name = "OkButton"; + this.OkButton.Size = new System.Drawing.Size(165, 48); + this.OkButton.TabIndex = 4; + this.OkButton.Text = "つぎへ👉"; + this.OkButton.UseVisualStyleBackColor = true; + this.OkButton.Click += new System.EventHandler(this.OkButton_Click); + // + // NameForm + // + this.AcceptButton = this.OkButton; + this.AutoScaleDimensions = new System.Drawing.SizeF(19F, 42F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(868, 193); + this.Controls.Add(this.CancelButton2); + this.Controls.Add(this.OkButton); + this.Controls.Add(this.TableColumnName); + this.Controls.Add(this.LogicalNameText); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Font = new System.Drawing.Font("メイリオ", 14F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + this.Name = "NameForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "論理名とテーブルカラム名"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox LogicalNameText; + private System.Windows.Forms.TextBox TableColumnName; + private System.Windows.Forms.Button CancelButton2; + private System.Windows.Forms.Button OkButton; + } +} \ No newline at end of file diff --git a/src/ExcelToCsvToDbCommon/Gamen/NameForm.cs b/src/ExcelToCsvToDbCommon/Gamen/NameForm.cs new file mode 100644 index 0000000..3b8e5c9 --- /dev/null +++ b/src/ExcelToCsvToDbCommon/Gamen/NameForm.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ExcelToCsvToDbCommon.Gamen +{ + public partial class NameForm : Form + { + public string LogicalName { get; set; } + + public NameForm(string logicalName) + { + InitializeComponent(); + + if (logicalName.IndexOf("(") >= 0) + { + LogicalNameText.Text = logicalName.Split('(')[0].Trim(); + TableColumnName.Text = logicalName.Split('(')[1].Trim(')').Trim(); + } + else + { + LogicalNameText.Text = logicalName.Trim(); + TableColumnName.Text = string.Empty; + } + LogicalNameText_TextChanged(null, null); + } + + private void LogicalNameText_TextChanged(object sender, EventArgs e) + { + OkButton.Enabled = LogicalNameText.Text != ""; + } + + private void OkButton_Click(object sender, EventArgs e) + { + LogicalName = LogicalNameText.Text + + (string.IsNullOrEmpty(TableColumnName.Text.Trim()) ? "" : $"({TableColumnName.Text})"); + DialogResult = DialogResult.OK; + } + } +} diff --git a/src/ExcelToCsvToDbCommon/Gamen/NameForm.resx b/src/ExcelToCsvToDbCommon/Gamen/NameForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/src/ExcelToCsvToDbCommon/Gamen/NameForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/src/ExcelToCsvToDbCommon/Gamen/TypeSelectForm.Designer.cs b/src/ExcelToCsvToDbCommon/Gamen/TypeSelectForm.Designer.cs new file mode 100644 index 0000000..fa76cc6 --- /dev/null +++ b/src/ExcelToCsvToDbCommon/Gamen/TypeSelectForm.Designer.cs @@ -0,0 +1,94 @@ +namespace ExcelToCsvToDbCommon.Gamen +{ + partial class TypeSelectForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.TypeCombo = new System.Windows.Forms.ComboBox(); + this.OkButton = new System.Windows.Forms.Button(); + this.CancelButton2 = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // TypeCombo + // + this.TypeCombo.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.TypeCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.TypeCombo.FormattingEnabled = true; + this.TypeCombo.Location = new System.Drawing.Point(12, 12); + this.TypeCombo.Name = "TypeCombo"; + this.TypeCombo.Size = new System.Drawing.Size(439, 50); + this.TypeCombo.TabIndex = 0; + // + // OkButton + // + this.OkButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.OkButton.Location = new System.Drawing.Point(111, 80); + this.OkButton.Name = "OkButton"; + this.OkButton.Size = new System.Drawing.Size(157, 48); + this.OkButton.TabIndex = 1; + this.OkButton.Text = "つぎへ👉"; + this.OkButton.UseVisualStyleBackColor = true; + this.OkButton.Click += new System.EventHandler(this.OkButton_Click); + // + // CancelButton2 + // + this.CancelButton2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelButton2.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelButton2.Location = new System.Drawing.Point(274, 80); + this.CancelButton2.Name = "CancelButton2"; + this.CancelButton2.Size = new System.Drawing.Size(177, 48); + this.CancelButton2.TabIndex = 2; + this.CancelButton2.Text = "キャンセル"; + this.CancelButton2.UseVisualStyleBackColor = true; + // + // TypeSelectForm + // + this.AcceptButton = this.OkButton; + this.AutoScaleDimensions = new System.Drawing.SizeF(19F, 42F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(463, 140); + this.Controls.Add(this.CancelButton2); + this.Controls.Add(this.OkButton); + this.Controls.Add(this.TypeCombo); + this.Font = new System.Drawing.Font("メイリオ", 14F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + this.Name = "TypeSelectForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "タイプ選択"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ComboBox TypeCombo; + private System.Windows.Forms.Button OkButton; + private System.Windows.Forms.Button CancelButton2; + } +} \ No newline at end of file diff --git a/src/ExcelToCsvToDbCommon/Gamen/TypeSelectForm.cs b/src/ExcelToCsvToDbCommon/Gamen/TypeSelectForm.cs new file mode 100644 index 0000000..90c0b89 --- /dev/null +++ b/src/ExcelToCsvToDbCommon/Gamen/TypeSelectForm.cs @@ -0,0 +1,31 @@ +using ExcelToCsvToDbCommon.Class; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ExcelToCsvToDbCommon.Gamen +{ + public partial class TypeSelectForm : Form + { + public ColumnType Type { get; set; } + + public TypeSelectForm() + { + InitializeComponent(); + + TypeCombo.DataSource = Enum.GetValues(typeof(ColumnType)); + } + + private void OkButton_Click(object sender, EventArgs e) + { + Type = (ColumnType)TypeCombo.SelectedValue; + DialogResult = DialogResult.OK; + } + } +} diff --git a/src/ExcelToCsvToDbCommon/Gamen/TypeSelectForm.resx b/src/ExcelToCsvToDbCommon/Gamen/TypeSelectForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/src/ExcelToCsvToDbCommon/Gamen/TypeSelectForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/src/ExcelToCsvToDbCommon/Properties/AssemblyInfo.cs b/src/ExcelToCsvToDbCommon/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..0335d6f --- /dev/null +++ b/src/ExcelToCsvToDbCommon/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// アセンブリに関する一般情報は以下を通して制御されます +// 制御されます。アセンブリに関連付けられている情報を変更するには、 +// これらの属性値を変更してください。 +[assembly: AssemblyTitle("ExcelToCsvToDbCommon")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("本田技研工業株式会社")] +[assembly: AssemblyProduct("ExcelToCsvToDbCommon")] +[assembly: AssemblyCopyright("Copyright © 本田技研工業株式会社 2026")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// ComVisible を false に設定すると、このアセンブリ内の型は COM コンポーネントから +// 参照できなくなります。COM からこのアセンブリ内の型にアクセスする必要がある場合は、 +// その型の ComVisible 属性を true に設定してください。 +[assembly: ComVisible(false)] + +// このプロジェクトが COM に公開される場合、次の GUID が typelib の ID になります +[assembly: Guid("9f267a81-8387-46f7-a299-cfc26216f895")] + +// アセンブリのバージョン情報は、以下の 4 つの値で構成されています: +// +// メジャー バージョン +// マイナー バージョン +// ビルド番号 +// リビジョン +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/ReiaSanTool/App.config b/src/ReiaSanTool/App.config new file mode 100644 index 0000000..ff226ea --- /dev/null +++ b/src/ReiaSanTool/App.config @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/ReiaSanTool/Class/IniAdapter.cs b/src/ReiaSanTool/Class/IniAdapter.cs new file mode 100644 index 0000000..bec167a --- /dev/null +++ b/src/ReiaSanTool/Class/IniAdapter.cs @@ -0,0 +1,32 @@ +//using System; +//using System.Collections.Generic; +//using System.ComponentModel; +//using System.Linq; +//using System.Text; +//using System.Threading.Tasks; + +//namespace ReiaSanTool.Class +//{ +// public class IniAdapter : CustomTypeDescriptor +// { +// private Dictionary> _data; +// private PropertyDescriptorCollection _propCache; // キャッシュ用 + +// public IniAdapter(Dictionary> data) => _data = data; + +// public override PropertyDescriptorCollection GetProperties(Attribute[] attributes) +// { +// // 毎回 new せず、一度作ったリストを使い回すのが PropertyGrid の鉄則です! +// if (_propCache == null) +// { +// var props = _data.SelectMany(sec => +// sec.Value.Select(kv => new IniPropertyDescriptor(sec.Key, kv.Key, sec.Value)) +// ).ToArray(); +// _propCache = new PropertyDescriptorCollection(props); +// } +// return _propCache; +// } + +// public override PropertyDescriptorCollection GetProperties() => GetProperties(null); +// } +//} diff --git a/src/ReiaSanTool/Class/IniPropertyDescriptor.cs b/src/ReiaSanTool/Class/IniPropertyDescriptor.cs new file mode 100644 index 0000000..74f8787 --- /dev/null +++ b/src/ReiaSanTool/Class/IniPropertyDescriptor.cs @@ -0,0 +1,48 @@ +//using System; +//using System.Collections.Generic; +//using System.ComponentModel; +//using System.Linq; +//using System.Text; +//using System.Threading.Tasks; + +//namespace ReiaSanTool.Class +//{ +// public class IniPropertyDescriptor : PropertyDescriptor +// { +// private Dictionary _section; +// private string _key; + +// public IniPropertyDescriptor(string sectionName, string key, Dictionary sectionData) +// : base($"{sectionName}_{key}", new Attribute[] { new CategoryAttribute(sectionName) }) +// { +// _section = sectionData; +// _key = key; +// } + +// public override string DisplayName => _key; +// public override Type ComponentType => typeof(IniAdapter); +// public override bool IsReadOnly => false; +// public override Type PropertyType => typeof(string); + +// // ★これを追加!型変換で迷わせないための「道しるべ」です +// public override TypeConverter Converter => new StringConverter(); // 型変換で迷わせない + +// public override object GetValue(object component) => _section[_key]; + + +// // これらが False や Default だと、確定時に値が捨てられることがあります +// public override bool CanResetValue(object component) => true; +// public override void ResetValue(object component) { } +// public override bool ShouldSerializeValue(object component) => true; + +// public override void SetValue(object component, object value) +// { +// // 確実に値を代入 +// _section[_key] = value?.ToString() ?? ""; + +// // 【重要】PropertyGridに「このインスタンスの中身が変わったよ」と公式に通知 +// // これにより、PropertyGridはキャッシュを捨てて表示を更新します。 +// OnValueChanged(component, EventArgs.Empty); +// } +// } +//} \ No newline at end of file diff --git a/src/ReiaSanTool/Dto/IniAll.cs b/src/ReiaSanTool/Dto/IniAll.cs new file mode 100644 index 0000000..f3497d8 --- /dev/null +++ b/src/ReiaSanTool/Dto/IniAll.cs @@ -0,0 +1,33 @@ +using KssSmaPlaLib.Ini; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ReiaSanTool.Dto +{ + public class IniAll + { + // これがPropertyGridに表示される項目になります + [Category("System")] + [DisplayName("ユーザー名")] + public string UserName { get; set; } = "Admin"; + + // --- ロード --- + public void Load() + { + // [System] セクションの UserName キーを読む + this.UserName = IniHelper.ReadValue(null, "System", "UserName", "DefaultUser"); + } + + // --- セーブ --- + public void Save() + { + // [System] セクションに UserName の値を書き込む + IniHelper.WriteValue(null, "System", "UserName", this.UserName); + } + } +} diff --git a/src/ReiaSanTool/Gamen/EditColumnForm.Designer.cs b/src/ReiaSanTool/Gamen/EditColumnForm.Designer.cs new file mode 100644 index 0000000..577e9ac --- /dev/null +++ b/src/ReiaSanTool/Gamen/EditColumnForm.Designer.cs @@ -0,0 +1,162 @@ +namespace ReiaSanTool.Gamen +{ + partial class EditColumnForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.BasePanel = new System.Windows.Forms.Panel(); + this.MainTableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); + this.HeaderPanel = new System.Windows.Forms.Panel(); + this.TypeCombo = new System.Windows.Forms.ComboBox(); + this.label1 = new System.Windows.Forms.Label(); + this.TypeAPanel = new System.Windows.Forms.Panel(); + this.label2 = new System.Windows.Forms.Label(); + this.KoteichiText = new System.Windows.Forms.TextBox(); + this.BasePanel.SuspendLayout(); + this.MainTableLayoutPanel.SuspendLayout(); + this.HeaderPanel.SuspendLayout(); + this.TypeAPanel.SuspendLayout(); + this.SuspendLayout(); + // + // BasePanel + // + this.BasePanel.AutoScroll = true; + this.BasePanel.Controls.Add(this.MainTableLayoutPanel); + this.BasePanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.BasePanel.Location = new System.Drawing.Point(0, 0); + this.BasePanel.Name = "BasePanel"; + this.BasePanel.Size = new System.Drawing.Size(549, 267); + this.BasePanel.TabIndex = 0; + // + // MainTableLayoutPanel + // + this.MainTableLayoutPanel.ColumnCount = 1; + this.MainTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.MainTableLayoutPanel.Controls.Add(this.HeaderPanel, 0, 0); + this.MainTableLayoutPanel.Controls.Add(this.TypeAPanel, 0, 1); + this.MainTableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Top; + this.MainTableLayoutPanel.Location = new System.Drawing.Point(0, 0); + this.MainTableLayoutPanel.Name = "MainTableLayoutPanel"; + this.MainTableLayoutPanel.RowCount = 2; + this.MainTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 32.03463F)); + this.MainTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 67.96537F)); + this.MainTableLayoutPanel.Size = new System.Drawing.Size(549, 231); + this.MainTableLayoutPanel.TabIndex = 0; + // + // HeaderPanel + // + this.HeaderPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.HeaderPanel.Controls.Add(this.label1); + this.HeaderPanel.Controls.Add(this.TypeCombo); + this.HeaderPanel.Location = new System.Drawing.Point(3, 3); + this.HeaderPanel.Name = "HeaderPanel"; + this.HeaderPanel.Size = new System.Drawing.Size(543, 68); + this.HeaderPanel.TabIndex = 0; + // + // TypeCombo + // + this.TypeCombo.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.TypeCombo.FormattingEnabled = true; + this.TypeCombo.Location = new System.Drawing.Point(145, 9); + this.TypeCombo.Name = "TypeCombo"; + this.TypeCombo.Size = new System.Drawing.Size(389, 50); + this.TypeCombo.TabIndex = 0; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(9, 12); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(130, 42); + this.label1.TabIndex = 1; + this.label1.Text = "タイプ:"; + // + // TypeAPanel + // + this.TypeAPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.TypeAPanel.Controls.Add(this.KoteichiText); + this.TypeAPanel.Controls.Add(this.label2); + this.TypeAPanel.Location = new System.Drawing.Point(3, 77); + this.TypeAPanel.Name = "TypeAPanel"; + this.TypeAPanel.Size = new System.Drawing.Size(543, 151); + this.TypeAPanel.TabIndex = 1; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(9, 12); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(130, 42); + this.label2.TabIndex = 2; + this.label2.Text = "固定値:"; + // + // KoteichiText + // + this.KoteichiText.Location = new System.Drawing.Point(145, 9); + this.KoteichiText.Name = "KoteichiText"; + this.KoteichiText.Size = new System.Drawing.Size(389, 49); + this.KoteichiText.TabIndex = 3; + // + // EditColumnForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(19F, 42F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(549, 267); + this.Controls.Add(this.BasePanel); + this.Font = new System.Drawing.Font("メイリオ", 14F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + this.Name = "EditColumnForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "列編集"; + this.BasePanel.ResumeLayout(false); + this.MainTableLayoutPanel.ResumeLayout(false); + this.HeaderPanel.ResumeLayout(false); + this.HeaderPanel.PerformLayout(); + this.TypeAPanel.ResumeLayout(false); + this.TypeAPanel.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel BasePanel; + private System.Windows.Forms.TableLayoutPanel MainTableLayoutPanel; + private System.Windows.Forms.Panel HeaderPanel; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ComboBox TypeCombo; + private System.Windows.Forms.Panel TypeAPanel; + private System.Windows.Forms.TextBox KoteichiText; + private System.Windows.Forms.Label label2; + } +} \ No newline at end of file diff --git a/src/ReiaSanTool/Gamen/EditColumnForm.cs b/src/ReiaSanTool/Gamen/EditColumnForm.cs new file mode 100644 index 0000000..c663590 --- /dev/null +++ b/src/ReiaSanTool/Gamen/EditColumnForm.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ReiaSanTool.Gamen +{ + public partial class EditColumnForm : Form + { + public EditColumnForm() + { + InitializeComponent(); + } + } +} diff --git a/src/ReiaSanTool/Gamen/EditColumnForm.resx b/src/ReiaSanTool/Gamen/EditColumnForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/src/ReiaSanTool/Gamen/EditColumnForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/src/ReiaSanTool/Gamen/MainForm.Designer.cs b/src/ReiaSanTool/Gamen/MainForm.Designer.cs new file mode 100644 index 0000000..9e86c84 --- /dev/null +++ b/src/ReiaSanTool/Gamen/MainForm.Designer.cs @@ -0,0 +1,96 @@ +namespace ReiaSanTool.Gamen +{ + partial class MainForm + { + /// + /// 必要なデザイナー変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージド リソースを破棄する場合は true を指定し、その他の場合は false を指定します。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows フォーム デザイナーで生成されたコード + + /// + /// デザイナー サポートに必要なメソッドです。このメソッドの内容を + /// コード エディターで変更しないでください。 + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.IniPropGrid = new System.Windows.Forms.PropertyGrid(); + this.PopupMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.HozonMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.OpenMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.PopupMenu.SuspendLayout(); + this.SuspendLayout(); + // + // IniPropGrid + // + this.IniPropGrid.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.IniPropGrid.Location = new System.Drawing.Point(12, 12); + this.IniPropGrid.Name = "IniPropGrid"; + this.IniPropGrid.Size = new System.Drawing.Size(580, 274); + this.IniPropGrid.TabIndex = 0; + // + // PopupMenu + // + this.PopupMenu.Font = new System.Drawing.Font("メイリオ", 14F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.PopupMenu.ImageScalingSize = new System.Drawing.Size(24, 24); + this.PopupMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.HozonMenu, + this.OpenMenu}); + this.PopupMenu.Name = "PopupMenu"; + this.PopupMenu.Size = new System.Drawing.Size(241, 133); + // + // HozonMenu + // + this.HozonMenu.Name = "HozonMenu"; + this.HozonMenu.Size = new System.Drawing.Size(240, 48); + this.HozonMenu.Text = "保存"; + this.HozonMenu.Click += new System.EventHandler(this.HozonMenu_Click); + // + // OpenMenu + // + this.OpenMenu.Name = "OpenMenu"; + this.OpenMenu.Size = new System.Drawing.Size(240, 48); + this.OpenMenu.Text = "開く..."; + this.OpenMenu.Click += new System.EventHandler(this.OpenMenu_Click); + // + // MainForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 18F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(604, 298); + this.ContextMenuStrip = this.PopupMenu; + this.Controls.Add(this.IniPropGrid); + this.Name = "MainForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "れいあさんツール💖"; + this.PopupMenu.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.PropertyGrid IniPropGrid; + private System.Windows.Forms.ContextMenuStrip PopupMenu; + private System.Windows.Forms.ToolStripMenuItem HozonMenu; + private System.Windows.Forms.ToolStripMenuItem OpenMenu; + } +} + diff --git a/src/ReiaSanTool/Gamen/MainForm.cs b/src/ReiaSanTool/Gamen/MainForm.cs new file mode 100644 index 0000000..2a4e008 --- /dev/null +++ b/src/ReiaSanTool/Gamen/MainForm.cs @@ -0,0 +1,72 @@ +using ExcelToCsvToDbCommon.Class; +using ReiaSanTool.Class; +using ReiaSanTool.Dto; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ReiaSanTool.Gamen +{ + public partial class MainForm : Form + { + // フォーム側 + //private BindingList _configs = new BindingList(); + private IniConfigContainer _container = new IniConfigContainer(); + + public MainForm() + { + InitializeComponent(); + + // リストにデータを追加 + //_configs.Add(new ColumnDefinition { LogicalName = "PlanCd", Type = ColumnType.Fixed, FixedValue = "K*SP**" }); + + // テストデータを1つ入れておく + _container.Columns.Add(new ColumnDefinition + { + LogicalName = "PlanCd", + Type = ColumnType.Fixed, + FixedValue = "K*SP**" + }); + + + // まとめてセット! + IniPropGrid.SelectedObject = _container; + } + + private void HozonMenu_Click(object sender, EventArgs e) + { + //_iniAll.Save(); + } + + private void OpenMenu_Click(object sender, EventArgs e) + { + using (var dlg = new OpenFileDialog()) + { + dlg.Multiselect = false; + dlg.Title = "Settings.ini ファイルを選択してください。"; + dlg.AddExtension = true; + dlg.CheckFileExists = true; + dlg.CheckPathExists = true; + dlg.RestoreDirectory = true; + dlg.Filter = "設定ファイル(*.ini)"; + // 最初に見せるフォルダ(デスクトップなど) + //dlg.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyComputer); + + // ダイアログを表示して「OK」が押されたら処理 + if (dlg.ShowDialog() == DialogResult.Cancel) return; + + // 選択されたファイルのパスを取得 + string filePath = dlg.FileName; + + //ここから。。。やめた!中断!🔥🌊 + } + } + } +} diff --git a/src/ReiaSanTool/Gamen/MainForm.resx b/src/ReiaSanTool/Gamen/MainForm.resx new file mode 100644 index 0000000..37ff906 --- /dev/null +++ b/src/ReiaSanTool/Gamen/MainForm.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/src/ReiaSanTool/Gamen/NewMainForm.Designer.cs b/src/ReiaSanTool/Gamen/NewMainForm.Designer.cs new file mode 100644 index 0000000..6b94542 --- /dev/null +++ b/src/ReiaSanTool/Gamen/NewMainForm.Designer.cs @@ -0,0 +1,251 @@ +namespace ReiaSanTool.Gamen +{ + partial class NewMainForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + this.IniDgv = new System.Windows.Forms.DataGridView(); + this.colNo = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colType = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colNaiyo = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colComment = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.OpenMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.SetteiMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.MenuFontMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.TitleMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.VersionMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.RowMoveMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.RowUpMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.RowDownMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.SaveMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ExcelViewMenu = new System.Windows.Forms.ToolStripMenuItem(); + ((System.ComponentModel.ISupportInitialize)(this.IniDgv)).BeginInit(); + this.ContextMenu.SuspendLayout(); + this.SuspendLayout(); + // + // IniDgv + // + this.IniDgv.AllowUserToAddRows = false; + this.IniDgv.AllowUserToDeleteRows = false; + this.IniDgv.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.IniDgv.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colNo, + this.colName, + this.colType, + this.colNaiyo, + this.colComment}); + this.IniDgv.Dock = System.Windows.Forms.DockStyle.Fill; + this.IniDgv.Location = new System.Drawing.Point(0, 0); + this.IniDgv.Name = "IniDgv"; + this.IniDgv.ReadOnly = true; + this.IniDgv.RowHeadersVisible = false; + this.IniDgv.RowHeadersWidth = 62; + this.IniDgv.RowTemplate.Height = 27; + this.IniDgv.Size = new System.Drawing.Size(617, 168); + this.IniDgv.TabIndex = 0; + // + // colNo + // + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleRight; + this.colNo.DefaultCellStyle = dataGridViewCellStyle1; + this.colNo.HeaderText = "No"; + this.colNo.MinimumWidth = 8; + this.colNo.Name = "colNo"; + this.colNo.ReadOnly = true; + this.colNo.Width = 150; + // + // colName + // + this.colName.HeaderText = "名前"; + this.colName.MinimumWidth = 8; + this.colName.Name = "colName"; + this.colName.ReadOnly = true; + this.colName.Width = 150; + // + // colType + // + this.colType.HeaderText = "タイプ"; + this.colType.MinimumWidth = 8; + this.colType.Name = "colType"; + this.colType.ReadOnly = true; + this.colType.Width = 150; + // + // colNaiyo + // + this.colNaiyo.HeaderText = "内容"; + this.colNaiyo.MinimumWidth = 8; + this.colNaiyo.Name = "colNaiyo"; + this.colNaiyo.ReadOnly = true; + this.colNaiyo.Width = 150; + // + // colComment + // + this.colComment.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.colComment.HeaderText = "コメント"; + this.colComment.MinimumWidth = 8; + this.colComment.Name = "colComment"; + this.colComment.ReadOnly = true; + // + // ContextMenu + // + this.ContextMenu.ImageScalingSize = new System.Drawing.Size(24, 24); + this.ContextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.OpenMenu, + this.SetteiMenu, + this.RowMoveMenu, + this.SaveMenu, + this.VersionMenu, + this.ExcelViewMenu}); + this.ContextMenu.Name = "ContextMenu"; + this.ContextMenu.Size = new System.Drawing.Size(241, 229); + this.ContextMenu.Opening += new System.ComponentModel.CancelEventHandler(this.ContextMenu_Opening); + // + // OpenMenu + // + this.OpenMenu.Name = "OpenMenu"; + this.OpenMenu.Size = new System.Drawing.Size(240, 32); + this.OpenMenu.Text = "開く..."; + this.OpenMenu.Click += new System.EventHandler(this.OpenMenu_Click); + // + // SetteiMenu + // + this.SetteiMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.MenuFontMenu, + this.TitleMenu}); + this.SetteiMenu.Name = "SetteiMenu"; + this.SetteiMenu.Size = new System.Drawing.Size(240, 32); + this.SetteiMenu.Text = "設定"; + // + // MenuFontMenu + // + this.MenuFontMenu.Name = "MenuFontMenu"; + this.MenuFontMenu.Size = new System.Drawing.Size(240, 34); + this.MenuFontMenu.Text = "メニューのフォント..."; + this.MenuFontMenu.Click += new System.EventHandler(this.MenuFontMenu_Click); + // + // TitleMenu + // + this.TitleMenu.Name = "TitleMenu"; + this.TitleMenu.Size = new System.Drawing.Size(240, 34); + this.TitleMenu.Text = "タイトル..."; + this.TitleMenu.Click += new System.EventHandler(this.TitleMenu_Click); + // + // VersionMenu + // + this.VersionMenu.Name = "VersionMenu"; + this.VersionMenu.Size = new System.Drawing.Size(240, 32); + this.VersionMenu.Text = "バージョン"; + // + // RowMoveMenu + // + this.RowMoveMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.RowUpMenu, + this.RowDownMenu}); + this.RowMoveMenu.Name = "RowMoveMenu"; + this.RowMoveMenu.Size = new System.Drawing.Size(240, 32); + this.RowMoveMenu.Text = "行移動"; + this.RowMoveMenu.DropDownOpening += new System.EventHandler(this.RowMoveMenu_DropDownOpening); + // + // RowUpMenu + // + this.RowUpMenu.Name = "RowUpMenu"; + this.RowUpMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Up))); + this.RowUpMenu.Size = new System.Drawing.Size(312, 34); + this.RowUpMenu.Text = "👆行UP"; + this.RowUpMenu.Click += new System.EventHandler(this.RowUpMenu_Click); + // + // RowDownMenu + // + this.RowDownMenu.Name = "RowDownMenu"; + this.RowDownMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Down))); + this.RowDownMenu.Size = new System.Drawing.Size(312, 34); + this.RowDownMenu.Text = "👇行DOWN"; + this.RowDownMenu.Click += new System.EventHandler(this.RowDownMenu_Click); + // + // SaveMenu + // + this.SaveMenu.Name = "SaveMenu"; + this.SaveMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S))); + this.SaveMenu.Size = new System.Drawing.Size(240, 32); + this.SaveMenu.Text = "保存"; + this.SaveMenu.Click += new System.EventHandler(this.SaveMenu_Click); + // + // ExcelViewMenu + // + this.ExcelViewMenu.Name = "ExcelViewMenu"; + this.ExcelViewMenu.Size = new System.Drawing.Size(240, 32); + this.ExcelViewMenu.Text = "Excelビュー..."; + this.ExcelViewMenu.Click += new System.EventHandler(this.ExcelViewMenu_Click); + // + // NewMainForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(19F, 42F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(617, 168); + this.ContextMenuStrip = this.ContextMenu; + this.Controls.Add(this.IniDgv); + this.Font = new System.Drawing.Font("メイリオ", 14F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.KeyPreview = true; + this.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7); + this.Name = "NewMainForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "れいあさんツールズ💖"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.NewMainForm_FormClosing); + this.Load += new System.EventHandler(this.NewMainForm_Load); + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.NewMainForm_KeyDown); + ((System.ComponentModel.ISupportInitialize)(this.IniDgv)).EndInit(); + this.ContextMenu.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.DataGridView IniDgv; + private System.Windows.Forms.ContextMenuStrip ContextMenu; + private System.Windows.Forms.ToolStripMenuItem SetteiMenu; + private System.Windows.Forms.ToolStripMenuItem MenuFontMenu; + private System.Windows.Forms.ToolStripMenuItem VersionMenu; + private System.Windows.Forms.ToolStripMenuItem TitleMenu; + private System.Windows.Forms.ToolStripMenuItem OpenMenu; + private System.Windows.Forms.DataGridViewTextBoxColumn colNo; + private System.Windows.Forms.DataGridViewTextBoxColumn colName; + private System.Windows.Forms.DataGridViewTextBoxColumn colType; + private System.Windows.Forms.DataGridViewTextBoxColumn colNaiyo; + private System.Windows.Forms.DataGridViewTextBoxColumn colComment; + private System.Windows.Forms.ToolStripMenuItem RowMoveMenu; + private System.Windows.Forms.ToolStripMenuItem RowUpMenu; + private System.Windows.Forms.ToolStripMenuItem RowDownMenu; + private System.Windows.Forms.ToolStripMenuItem SaveMenu; + private System.Windows.Forms.ToolStripMenuItem ExcelViewMenu; + } +} \ No newline at end of file diff --git a/src/ReiaSanTool/Gamen/NewMainForm.cs b/src/ReiaSanTool/Gamen/NewMainForm.cs new file mode 100644 index 0000000..5898916 --- /dev/null +++ b/src/ReiaSanTool/Gamen/NewMainForm.cs @@ -0,0 +1,158 @@ +using ExcelToCsvToDbCommon.Class; +using KssSmaPlaLib.Forms; +using KssSmaPlaLib.Ini; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ReiaSanTool.Gamen +{ + public partial class NewMainForm : Form + { + private string _iniPath = string.Empty; + + public NewMainForm() + { + InitializeComponent(); + } + + private void NewMainForm_Load(object sender, EventArgs e) + { + SetTitleWithIniPath(); + FormHelper.LoadFormBounds(this); + DgvHelper.Initialize(IniDgv); + DgvHelper.DgvLoadColWidth(IniDgv); + ContextMenuHelper.SetFont(this, ContextMenu); + } + + private void SetTitleWithIniPath() + { + FormHelper.SetTitle(this); + if (!string.IsNullOrEmpty(_iniPath)) + { + this.Text = this.Text + " - " + _iniPath; + } + } + + private void NewMainForm_FormClosing(object sender, FormClosingEventArgs e) + { + FormHelper.SaveFormBounds(this); + DgvHelper.DgvSaveColWidth(IniDgv); + } + + private void ContextMenu_Opening(object sender, CancelEventArgs e) + { + SaveMenu.Enabled = !string.IsNullOrEmpty(_iniPath); + ContextMenuHelper.DispVersion(VersionMenu); + } + + private void MenuFontMenu_Click(object sender, EventArgs e) + { + ContextMenuHelper.SelectMenuFont(this, ContextMenu); + } + + private void TitleMenu_Click(object sender, EventArgs e) + { + ContextMenuHelper.SetFormTitle(this); + } + + private void OpenMenu_Click(object sender, EventArgs e) + { + var iniPath = IniHelper.OpenIni(); + if (string.IsNullOrEmpty(iniPath)) return; + + LoadGrid(ColumnDefinition.Load(iniPath, "ExcelToCsvPoSpIni")); + _iniPath = iniPath; + SetTitleWithIniPath(); + } + + private void LoadGrid(List cdList) + { + IniDgv.Rows.Clear(); + for (int cnt = 0; cnt < cdList.Count; cnt++) + { + var rowIndex = IniDgv.Rows.Add(); + IniDgv.Rows[rowIndex].Cells["colNo"].Value = cnt + 1; + IniDgv.Rows[rowIndex].Cells["colName"].Value = cdList[cnt].LogicalName; + IniDgv.Rows[rowIndex].Cells["colType"].Value = cdList[cnt].TypeName; + IniDgv.Rows[rowIndex].Cells["colNaiyo"].Value = cdList[cnt].Naiyo; + IniDgv.Rows[rowIndex].Cells["colComment"].Value = cdList[cnt].Comment; + IniDgv.Rows[rowIndex].Tag = cdList[cnt]; + } + } + + private void RowMoveMenu_DropDownOpening(object sender, EventArgs e) + { + RowUpMenu.Enabled = false; + RowDownMenu.Enabled = false; + if (IniDgv.SelectedRows.Count == 0) return; + + RowUpMenu.Enabled = IniDgv.SelectedRows[0].Index != 0; + RowDownMenu.Enabled = IniDgv.SelectedRows[0].Index != IniDgv.Rows.Count - 1; + } + + private void RowUpMenu_Click(object sender, EventArgs e) + { + if (IniDgv.SelectedRows.Count == 0) return; + + DgvHelper.MoveRow(IniDgv, IniDgv.SelectedRows[0].Index, true); + NoFurinaoshi(); + } + + private void RowDownMenu_Click(object sender, EventArgs e) + { + if (IniDgv.SelectedRows.Count == 0) return; + + DgvHelper.MoveRow(IniDgv, IniDgv.SelectedRows[0].Index, false); + NoFurinaoshi(); + } + private void NoFurinaoshi() + { + for (int cnt = 0; cnt < IniDgv.Rows.Count; cnt++) + { + IniDgv.Rows[cnt].Cells["colNo"].Value = cnt + 1; + } + } + + private void SaveMenu_Click(object sender, EventArgs e) + { + // 一旦Col行をすべて削除 + for (var cnt = 1; cnt <= 999; cnt++) + IniHelper.WriteValue(_iniPath, "ExcelToCsvPoSpIni", $"Col{cnt:D3}", null); + + for (var cnt = 0; cnt < IniDgv.Rows.Count; cnt++) + { + var cd = IniDgv.Rows[cnt].Tag as ColumnDefinition; + if (cd is null) continue; + IniHelper.WriteValue(_iniPath, "ExcelToCsvPoSpIni", $"Col{cnt + 1:D3}", cd.IniRaw()); + } + + ToastNotifier.Show(this, "保存しました。", Color.SeaGreen); + } + + private void NewMainForm_KeyDown(object sender, KeyEventArgs e) + { + // Enabled制御をしておく + ContextMenu_Opening(null, null); + RowMoveMenu_DropDownOpening(null, null); + + // ショートカット実行!(本来はメニューを開いているときか効かない!) + if (ContextMenuHelper.ExecuteShortcutWithEnabledCheck(ContextMenu.Items, e.KeyData)) + { + e.Handled = true; + } + } + + private void ExcelViewMenu_Click(object sender, EventArgs e) + { + using(var frm=new SelectExcelColumnForm( + "")) + } + } +} diff --git a/src/ReiaSanTool/Gamen/NewMainForm.resx b/src/ReiaSanTool/Gamen/NewMainForm.resx new file mode 100644 index 0000000..01b8d18 --- /dev/null +++ b/src/ReiaSanTool/Gamen/NewMainForm.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + 17, 17 + + \ No newline at end of file diff --git a/src/ReiaSanTool/Gamen/SelectExcelColumnForm.Designer.cs b/src/ReiaSanTool/Gamen/SelectExcelColumnForm.Designer.cs new file mode 100644 index 0000000..b5bb2e8 --- /dev/null +++ b/src/ReiaSanTool/Gamen/SelectExcelColumnForm.Designer.cs @@ -0,0 +1,66 @@ +namespace ReiaSanTool.Gamen +{ + partial class SelectExcelColumnForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ExcelDgv = new System.Windows.Forms.DataGridView(); + ((System.ComponentModel.ISupportInitialize)(this.ExcelDgv)).BeginInit(); + this.SuspendLayout(); + // + // ExcelDgv + // + this.ExcelDgv.AllowUserToAddRows = false; + this.ExcelDgv.AllowUserToDeleteRows = false; + this.ExcelDgv.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ExcelDgv.Dock = System.Windows.Forms.DockStyle.Fill; + this.ExcelDgv.Location = new System.Drawing.Point(0, 0); + this.ExcelDgv.Name = "ExcelDgv"; + this.ExcelDgv.ReadOnly = true; + this.ExcelDgv.RowHeadersWidth = 62; + this.ExcelDgv.RowTemplate.Height = 27; + this.ExcelDgv.Size = new System.Drawing.Size(429, 255); + this.ExcelDgv.TabIndex = 0; + // + // SelectExcelColumnForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 18F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(429, 255); + this.Controls.Add(this.ExcelDgv); + this.Name = "SelectExcelColumnForm"; + this.Text = "列を選択してください。"; + ((System.ComponentModel.ISupportInitialize)(this.ExcelDgv)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.DataGridView ExcelDgv; + } +} \ No newline at end of file diff --git a/src/ReiaSanTool/Gamen/SelectExcelColumnForm.cs b/src/ReiaSanTool/Gamen/SelectExcelColumnForm.cs new file mode 100644 index 0000000..88b826e --- /dev/null +++ b/src/ReiaSanTool/Gamen/SelectExcelColumnForm.cs @@ -0,0 +1,65 @@ +using ClosedXML; +using ClosedXML.Excel; +using KssSmaPlaLib.IO.Excel; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ReiaSanTool.Gamen +{ + public partial class SelectExcelColumnForm : Form + { + private string _excelFilePath = string.Empty; + public SelectExcelColumnForm(string excelFilePath) + { + _excelFilePath = excelFilePath; + + InitializeComponent(); + + PreviewExcel(_excelFilePath, ExcelDgv); + } + + public void PreviewExcel(string filePath, DataGridView dgv) + { + // 1. DataTableを準備(DataGridViewに流し込む用) + DataTable dt = new DataTable(); + + using (var workbook = new XLWorkbook(filePath)) + { + // 最初のシートを取得 + var worksheet = workbook.Worksheets.First(); + + // 2. 100x100の範囲を指定(データがある範囲+100の小さい方) + int maxRows = Math.Min(worksheet.LastRowUsed().RowNumber(), 100); + int maxCols = Math.Min(worksheet.LastColumnUsed().ColumnNumber(), 100); + + // 3. 列(ヘッダー)を作成 + for (int i = 1; i <= maxCols; i++) + { + // 列名を "A", "B", "C"... にする(さっきの変換メソッドを使ってもOK!) + dt.Columns.Add(ExcelColumnHelperUxer.GetExcelColumnLetter(i)); + } + + // 4. 行データを流し込む + for (int r = 1; r <= maxRows; r++) + { + var newRow = dt.NewRow(); + for (int c = 1; c <= maxCols; c++) + { + newRow[c - 1] = worksheet.Cell(r, c).Value; + } + dt.Rows.Add(newRow); + } + } + + // 5. DataGridViewに一気にセット(神設定のDoubleBufferedをお忘れなく!) + dgv.DataSource = dt; + } + } +} diff --git a/src/ReiaSanTool/Gamen/SelectExcelColumnForm.resx b/src/ReiaSanTool/Gamen/SelectExcelColumnForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/src/ReiaSanTool/Gamen/SelectExcelColumnForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/src/ReiaSanTool/Program.cs b/src/ReiaSanTool/Program.cs new file mode 100644 index 0000000..59c0336 --- /dev/null +++ b/src/ReiaSanTool/Program.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ReiaSanTool +{ + internal static class Program + { + /// + /// アプリケーションのメイン エントリ ポイントです。 + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Gamen.NewMainForm()); + } + } +} diff --git a/src/ReiaSanTool/Properties/AssemblyInfo.cs b/src/ReiaSanTool/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..474fa8f --- /dev/null +++ b/src/ReiaSanTool/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// アセンブリに関する一般的な情報は、次の方法で制御されます +// 制御されます。アセンブリに関連付けられている情報を変更するには、 +// これらの属性値を変更します。 +[assembly: AssemblyTitle("ReiaSanTool")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("本田技研工業株式会社")] +[assembly: AssemblyProduct("ReiaSanTool")] +[assembly: AssemblyCopyright("Copyright © 本田技研工業株式会社 2026")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// ComVisible を false に設定すると、このアセンブリ内の型は COM コンポーネントから +// 参照できなくなります。COM からこのアセンブリ内の型にアクセスする必要がある場合は、 +// その型の ComVisible 属性を true に設定してください。 +[assembly: ComVisible(false)] + +// このプロジェクトが COM に公開される場合、次の GUID が typelib の ID になります +[assembly: Guid("6434a0da-0c7e-46b8-99b9-b7c31f7b6f9d")] + +// アセンブリのバージョン情報は、以下の 4 つの値で構成されています: +// +// メジャー バージョン +// マイナー バージョン +// ビルド番号 +// リビジョン +// +[assembly: AssemblyVersion("0.1.0.0")] +[assembly: AssemblyFileVersion("0.1.0.0")] diff --git a/src/ReiaSanTool/Properties/Resources.Designer.cs b/src/ReiaSanTool/Properties/Resources.Designer.cs new file mode 100644 index 0000000..d78387c --- /dev/null +++ b/src/ReiaSanTool/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// このコードはツールによって生成されました。 +// ランタイム バージョン:4.0.30319.42000 +// +// このファイルへの変更は、以下の状況下で不正な動作の原因になったり、 +// コードが再生成されるときに損失したりします +// +//------------------------------------------------------------------------------ + +namespace ReiaSanTool.Properties +{ + + + /// + /// ローカライズされた文字列などを検索するための、厳密に型指定されたリソース クラスです。 + /// + // このクラスは StronglyTypedResourceBuilder クラスが ResGen + // または Visual Studio のようなツールを使用して自動生成されました。 + // メンバーを追加または削除するには、.ResX ファイルを編集して、/str オプションと共に + // ResGen を実行し直すか、または VS プロジェクトをリビルドします。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// このクラスで使用されるキャッシュされた ResourceManager インスタンスを返します。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ReiaSanTool.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// すべてについて、現在のスレッドの CurrentUICulture プロパティをオーバーライドします + /// 現在のスレッドの CurrentUICulture プロパティをオーバーライドします。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/src/ReiaSanTool/Properties/Resources.resx b/src/ReiaSanTool/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/src/ReiaSanTool/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/src/ReiaSanTool/Properties/Settings.Designer.cs b/src/ReiaSanTool/Properties/Settings.Designer.cs new file mode 100644 index 0000000..8fdcef5 --- /dev/null +++ b/src/ReiaSanTool/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace ReiaSanTool.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/src/ReiaSanTool/Properties/Settings.settings b/src/ReiaSanTool/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/src/ReiaSanTool/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/ReiaSanTool/ReiaSanTool.csproj b/src/ReiaSanTool/ReiaSanTool.csproj new file mode 100644 index 0000000..38a427b --- /dev/null +++ b/src/ReiaSanTool/ReiaSanTool.csproj @@ -0,0 +1,162 @@ + + + + + Debug + AnyCPU + {6434A0DA-0C7E-46B8-99B9-B7C31F7B6F9D} + WinExe + ReiaSanTool + ReiaSanTool + v4.8 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + packages\ClosedXML.0.105.0\lib\netstandard2.0\ClosedXML.dll + + + packages\ClosedXML.Parser.2.0.0\lib\netstandard2.0\ClosedXML.Parser.dll + + + packages\DocumentFormat.OpenXml.3.1.1\lib\net46\DocumentFormat.OpenXml.dll + + + packages\DocumentFormat.OpenXml.Framework.3.1.1\lib\net46\DocumentFormat.OpenXml.Framework.dll + + + packages\ExcelNumberFormat.1.1.0\lib\net20\ExcelNumberFormat.dll + + + packages\Microsoft.Bcl.HashCode.1.1.1\lib\net461\Microsoft.Bcl.HashCode.dll + + + packages\RBush.Signed.4.0.0\lib\net47\RBush.dll + + + packages\SixLabors.Fonts.1.0.0\lib\netstandard2.0\SixLabors.Fonts.dll + + + + packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + + + + packages\System.Memory.4.5.5\lib\net461\System.Memory.dll + + + + packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + + packages\System.Runtime.CompilerServices.Unsafe.4.7.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll + + + + + + + + + + + + + + + + + + Form + + + EditColumnForm.cs + + + Form + + + MainForm.cs + + + Form + + + NewMainForm.cs + + + Form + + + SelectExcelColumnForm.cs + + + + + EditColumnForm.cs + + + MainForm.cs + + + NewMainForm.cs + + + SelectExcelColumnForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + {4136CE96-10AA-4B55-B49F-68C80E9E3BC8} + KssSmaPlaLib + + + {9f267a81-8387-46f7-a299-cfc26216f895} + ExcelToCsvToDbCommon + + + + \ No newline at end of file diff --git a/src/ReiaSanTool/ReiaSanTool.sln b/src/ReiaSanTool/ReiaSanTool.sln new file mode 100644 index 0000000..0a1c1c7 --- /dev/null +++ b/src/ReiaSanTool/ReiaSanTool.sln @@ -0,0 +1,43 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.37012.4 d17.14 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReiaSanTool", "ReiaSanTool.csproj", "{6434A0DA-0C7E-46B8-99B9-B7C31F7B6F9D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KssSmaPlaLib", "..\..\..\SharedLibs\KssSmaPlaLib\KssSmaPlaLib.csproj", "{4136CE96-10AA-4B55-B49F-68C80E9E3BC8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExcelToCsvToDb", "..\ExcelToCsvToDb\ExcelToCsvToDb.csproj", "{6E9D8E26-7349-4FB9-BACF-8B1DC498E08B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExcelToCsvToDbCommon", "..\ExcelToCsvToDbCommon\ExcelToCsvToDbCommon.csproj", "{9F267A81-8387-46F7-A299-CFC26216F895}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6434A0DA-0C7E-46B8-99B9-B7C31F7B6F9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6434A0DA-0C7E-46B8-99B9-B7C31F7B6F9D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6434A0DA-0C7E-46B8-99B9-B7C31F7B6F9D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6434A0DA-0C7E-46B8-99B9-B7C31F7B6F9D}.Release|Any CPU.Build.0 = Release|Any CPU + {4136CE96-10AA-4B55-B49F-68C80E9E3BC8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4136CE96-10AA-4B55-B49F-68C80E9E3BC8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4136CE96-10AA-4B55-B49F-68C80E9E3BC8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4136CE96-10AA-4B55-B49F-68C80E9E3BC8}.Release|Any CPU.Build.0 = Release|Any CPU + {6E9D8E26-7349-4FB9-BACF-8B1DC498E08B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6E9D8E26-7349-4FB9-BACF-8B1DC498E08B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6E9D8E26-7349-4FB9-BACF-8B1DC498E08B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6E9D8E26-7349-4FB9-BACF-8B1DC498E08B}.Release|Any CPU.Build.0 = Release|Any CPU + {9F267A81-8387-46F7-A299-CFC26216F895}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9F267A81-8387-46F7-A299-CFC26216F895}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9F267A81-8387-46F7-A299-CFC26216F895}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9F267A81-8387-46F7-A299-CFC26216F895}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {9A62B94E-02D7-46B3-BD5C-A681863D0F00} + EndGlobalSection +EndGlobal diff --git a/src/ReiaSanTool/packages.config b/src/ReiaSanTool/packages.config new file mode 100644 index 0000000..c7c7ac0 --- /dev/null +++ b/src/ReiaSanTool/packages.config @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file