4

* .htmファイルをExcelアプリケーション(Microsoft.Office.Interop.Excel)で開きました。解析は素晴らしかったです!だから私はそれで作業することができます。より高速にするために、Excel Rangeからデータを取得し、System.Arrayに挿入して操作しようとしています。

Excel.Range range = ExcelWorksheet.get_Range("A1", "H1500"); // get all values
System.Array dataArray = (System.Array)(range.Cells.Value2); // insert into array

問題はデータ型にあります。Excelセルに時刻または日付形式がある場合、次のようにrange.Cells.Value2なり
ます。12.06.2012〜41072(Excelセルタイプ-日付) 14:
48〜0,616666666666667(Excelセルタイプ-時間)
Excelセルから単一の値を取得すると、正しい値が取得されます(とCells.Text.ToString()):

ExcelWorksheet.get_Range("A1", "A1").Cells.Text.ToString()

タスク:別の種類ではなく、テキストと同じように、Excelシートから値をそのまま取得する必要があります。
そして、Excelが私の代わりに考えてほしくない:)

4

2 に答える 2

5

返された値を必要な形式に変換してみませんか? DateTime の FromOADate メソッドは、このために設計されています ( http://msdn.microsoft.com/en-us/library/1ad4d8d6(v=vs.80).aspxを参照)。たとえば、返される時刻の値は、1 日の 24 分の小数部分を表します。したがって、次の例は「14:48」を出力します。

double oleDateTime = 0.616666666666667;
DateTime dt = DateTime.FromOADate(oleDateTime);
string time = dt.ToString("H:mm");
Console.WriteLine(time);

日付値に関しては、同じアプローチを使用できます。唯一の違いは、(時間だけでなく) 日付部分が含まれているため、Excel (double) からの値がゼロより大きいという事実です。次の例では、「12.06.2012」が生成されます。

dt = DateTime.FromOADate(41072);
string date = dt.ToString("dd.MM.yyyy");
Console.WriteLine(date);

さらに説明すると、日付と時刻 (返された Excel 値が 0 より大きい) を扱っている場合、次のようにすると "6/12/2012 2:48:00 PM" となります。

dt = DateTime.FromOADate(41072.616666666666667);
Console.WriteLine(dt.ToString());
于 2012-06-24T17:52:21.430 に答える
0

この方法は、Excelファイルに表示/表示されているものを正確に読み取りたい場合に使用します。

Excel.Range range = workSheet.get_Range("A1", "D4");

int totalRows = range.Rows.Count;
int totalColumns = range.Columns.Count;
for (int rowCounter = 1; rowCounter <= totalRows; rowCounter++)
{
  for (int colCounter = 1; colCounter <= totalColumns; colCounter++)
  {
     var cellVal = workSheet.Cells[rowCounter, colCounter];
     var val = cellVal.Text;
  }
}
于 2013-03-11T09:08:48.767 に答える