Spreadsheetgear - 获取一系列单元格的字符串表示形式

时间:2014-03-19 16:08:30

标签: spreadsheetgear

我最近开始使用SpreadsheetGear来解析Excel文件。我需要遍历每一行并显示前6列的字符串表示。我做的是这个:

    Debug.Print(ssgSheet.Cells(i,0).Text)
    Debug.Print(ssgSheet.Cells(i,1).Text)
    Debug.Print(ssgSheet.Cells(i,2).Text)
    Debug.Print(ssgSheet.Cells(i,3).Text)
    Debug.Print(ssgSheet.Cells(i,4).Text)
    Debug.Print(ssgSheet.Cells(i,5).Text)

其中'i'是工作表的当前行。这不是很漂亮,但是现在,如果我使用6线版本进行调试,这并不是什么大问题。我也试过这个:

    Debug.Print(ssgSheet.Cells(i, 0, i, 5).Text)

但我只得到一个空白。

我只是想知道SpreadsheetGear中是否有一种简单的方法来获取一行或一系列单元格,并将它作为某种分隔的字符串返回?我在SpreadsheetGear API site上找不到合适的功能,但也许我错过了。

2 个答案:

答案 0 :(得分:1)

范围到DataTable

我不知道SpreadsheetGear中的任何内置函数来从一系列单元格中获取分隔字符串。但是,有一个内置函数可以从一系列单元格中获取DataTable。

DataTable dt = ssgSheet.Cells[i, 0, i, 5].GetDataTable(SpreadsheetGear.Data.GetDataFlags.None);

(您可能希望根据是否有列名来设置不同的标志。)

拥有DataTable后,您可以使用this questionthis question中的代码获取带分隔符的字符串。

以CSV格式将范围保存到流

另一种选择是将CSV格式的范围保存到Stream,然后从Stream中获取分隔的字符串。

using (System.IO.MemoryStream mstream = new System.IO.MemoryStream())
{
  ssgSheet.Cells[i, 0, i, 5].SaveToStream(mstream, SpreadsheetGear.FileFormat.CSV);
  mstream.Position = 0;
  System.IO.StreamReader reader = new System.IO.StreamReader(mstream);
  Debug.Print(reader.ReadToEnd());
}

答案 1 :(得分:0)

public void FormatedExport(string destinationFileName, ref DataTable sourceTable, ref FileExportParameters fileExportParameters)
{
    // Create a new workbook and worksheet.
    IWorkbook _workbook = SpreadsheetGear.Factory.GetWorkbook();
    IWorksheet _worksheet = _workbook.Worksheets["Sheet1"];

    // Get the top left cell for the DataTable.
    SpreadsheetGear.IRange _range = _worksheet.Cells["A1"];

    // Copy the DataTable to the worksheet range.
    _range.CopyFromDataTable(sourceTable, SpreadsheetGear.Data.SetDataFlags.None);

    // Auto size all worksheet columns which contain data
    _worksheet.UsedRange.Columns.AutoFit();

    // Stream the Excel spreadsheet to the client in a format
    // compatible with Excel 97/2000/XP/2003/2007/2010.
    if (fileExportParameters.exportType == ExportType.Excel)
       _workbook.SaveAs(destinationFileName, SpreadsheetGear.FileFormat.Excel8);
    else if (fileExportParameters.exportType == ExportType.FormatedText)
      _workbook.SaveAs(destinationFileName, SpreadsheetGear.FileFormat.CSV);

}