したがって、私のプログラムは.csvと.xlsxという2つのファイルタイプを取ります。 ファイル内のデータが検証されるかどうかを調べる2つのメソッドがあります。ファイルが検証された場合はtrueを返します。csvを変更してワークブックをExcelに戻し、同じファイルに戻す方法は?
これ以外の場合はfalseを返すだけでなく、追加の列を追加したい場合は というエラーが表示され、特定のエラーメッセージがセルに書き込まれます。 |例えば
、
Data.csvはもともと好きに見える場合は、この 最初の行は、G
A列名ですB | C | D | E | F |データ・タイプが行に間違っている場合G
行1
行2
行3
....
行と列と仮定すると、0
をインデックスされます3列B(セル[4] [1])と2列G(セル[2] [6])の列を作成すると、Hと呼ばれるGの後に列を作成したい。何のメッセージを間違えた。
Like
A | B | C | D | E | F | G | H |
行1
行2 Bはここ
は私の方法で...... Gが間違ったタイプ
である
間違ったタイプの3行目で
私はxlsxのExcel Interlopを使用しています
private bool FileValidatorXlsx()
{
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(_filename, ReadOnly: true);
foreach (Excel.Worksheet xlWorksheet in xlWorkbook.Worksheets)
{
Excel.Range xlRange = xlWorksheet.UsedRange;
int rowCount = xlRange.Rows.Count;
int colCount = xlRange.Columns.Count;
for (int i = 2; i <= rowCount; i++)
{
string row = "";
for (int j = 1; j <= colCount; j++)
{
if (xlRange.Cells[i, j].Value2 == null)
{
return false;
}
else
{
// These 2 columns consist of time format (h:mm);
if (j == 6 || j == 7)
{
row += (xlRange.Cells[i, j].Text);
}
else
{
row += (string)xlRange.Cells[i, j].Value2.ToString();
}
// Don't want to append , to the last item
if (j < colCount)
{
row += ',';
}
}
}
// if the record (row) is not valid, just return false
if (!ValidateRecord(row))
{
return false;
}
}
}
return true;
}
これは、これらの線に沿って何かがあなたのループ内で動作するはず
private bool ValidateRecord(string record)
{
List<string> row;
switch (_fileType)
{
case ((int)extensionTypes.CSV):
row = record.Split(',').ToList<string>();
if (row.Count != 9)
{
return false;
}
break;
case ((int)extensionTypes.XLSX):
row = record.Split(',').ToList<string>();
if (row.Count != 9)
{
return false;
}
break;
default:
return false;
}
return IsValidRow(row);
}
私は上記を試みましたが、私はExcelで行われた変更は見ませんでした。また、私はReadOnlyを削除しなければなりませんでした:本当に – ygongdev
mmmの周りを遊んだ後、私はついにそれが動作するようになったと思います。私は問題がExcelのプロセス内で正しく閉鎖されていないと思う。ありがとう! – ygongdev