我最近开始使用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上找不到合适的功能,但也许我错过了。
答案 0 :(得分:1)
范围到DataTable
我不知道SpreadsheetGear中的任何内置函数来从一系列单元格中获取分隔字符串。但是,有一个内置函数可以从一系列单元格中获取DataTable。
DataTable dt = ssgSheet.Cells[i, 0, i, 5].GetDataTable(SpreadsheetGear.Data.GetDataFlags.None);
(您可能希望根据是否有列名来设置不同的标志。)
拥有DataTable后,您可以使用this question或this 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);
}