ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Iterating through workbook capturing text (https://www.excelbanter.com/excel-programming/290269-iterating-through-workbook-capturing-text.html)

Matt Giedt

Iterating through workbook capturing text
 
Hello all.

I'm trying to write a simple C# interop class that, when given a valid
path to an Excel file, returns the textual contents of that file.

(Assume that the info parameter refers to a valid XLS file.)

public string parse( FileInfo info )
{
StringBuilder sb = new StringBuilder();
Excel.Application app = new Excel.Application();
app.Visible = false;

Excel.Workbook wb = ,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing );

wb.Activate();

//
// Attempt # 1:
//

try
{
Excel.Range range = app.get_Range( "Sheets", Type.Missing );
sb.Append( range.Text );
}
catch( Exception e )
{
Console.WriteLine( "Error parsing excel document." );
Console.WriteLine( e.Message );
Console.WriteLine( e.StackTrace );
}

//
// Prints the exception:
//
// Error parsing excel document.
// Exception from HRESULT: 0x800A03EC.
// at Excel.ApplicationClass.get_Range(Object Cell1, Object Cell2)
//

//
// Attempt # 2:
//

try
{
foreach( Excel._Worksheet sheet in wb.Worksheets )
{
foreach( Excel.Range cell in sheet.Cells )
{
sb.Append( cell.Text );
}
}
}
catch( Exception e )
{
Console.WriteLine( "Error parsing excel document." );
Console.WriteLine( e.Message );
Console.WriteLine( e.StackTrace );
}

//
// Prints the exception:
//
// Error parsing excel document.
// Member not found.
// at System.RuntimeType.ForwardCallToInvokeMember
// (String memberName, BindingFlags flags,
// Object target, Int32[] aWrapperTypes,
// MessageData& msgData)
// at Excel.Range.GetEnumerator()
//

wb.Close(false, Type.Missing, Type.Missing);
app.Quit();
return sb.ToString();
}

Any help would be greatly appreciated.
TIA,
-Matt

Jeff Webb

Iterating through workbook capturing text
 
Why don't you just use interop to save the file as an XML Spreadsheet, then use an XSLT transform

Otherwise, you probably want to replace sheet.Cells with sheet.UsedRange, and I think cell.Text should be cell.Value in your second attempt

-- Jeff

onedaywhen

Iterating through workbook capturing text
 
The Excel.Range object's Text property is read-only. try using the
Value (actually, with c# Value2 is more usable) or Formula properties
instead.

--

(Matt Giedt) wrote in message om...
Hello all.

I'm trying to write a simple C# interop class that, when given a valid
path to an Excel file, returns the textual contents of that file.

(Assume that the info parameter refers to a valid XLS file.)

public string parse( FileInfo info )
{
StringBuilder sb = new StringBuilder();
Excel.Application app = new Excel.Application();
app.Visible = false;

Excel.Workbook wb = ,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing );

wb.Activate();

//
// Attempt # 1:
//

try
{
Excel.Range range = app.get_Range( "Sheets", Type.Missing );
sb.Append( range.Text );
}
catch( Exception e )
{
Console.WriteLine( "Error parsing excel document." );
Console.WriteLine( e.Message );
Console.WriteLine( e.StackTrace );
}

//
// Prints the exception:
//
// Error parsing excel document.
// Exception from HRESULT: 0x800A03EC.
// at Excel.ApplicationClass.get_Range(Object Cell1, Object Cell2)
//

//
// Attempt # 2:
//

try
{
foreach( Excel._Worksheet sheet in wb.Worksheets )
{
foreach( Excel.Range cell in sheet.Cells )
{
sb.Append( cell.Text );
}
}
}
catch( Exception e )
{
Console.WriteLine( "Error parsing excel document." );
Console.WriteLine( e.Message );
Console.WriteLine( e.StackTrace );
}

//
// Prints the exception:
//
// Error parsing excel document.
// Member not found.
// at System.RuntimeType.ForwardCallToInvokeMember
// (String memberName, BindingFlags flags,
// Object target, Int32[] aWrapperTypes,
// MessageData& msgData)
// at Excel.Range.GetEnumerator()
//

wb.Close(false, Type.Missing, Type.Missing);
app.Quit();
return sb.ToString();
}

Any help would be greatly appreciated.
TIA,
-Matt



All times are GMT +1. The time now is 08:51 PM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
ExcelBanter.com