or
Sub ProcessData() Dim FormatProvider = New CsvFormatProvider With FormatProvider With .Settings .Delimiter = "," .Quote = """" .HasHeaderRow = True .Encoding = New System.Text.UnicodeEncoding End With End With Dim Filename As String = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Telerik Test.csv") Dim WB As Workbook = LoadWB(Filename, FormatProvider) '-- do something with the loaded data... End Sub Function LoadWB(FileName As String, FormatProvider As CsvFormatProvider) As Workbook If Not File.Exists(FileName) Then Throw New FileNotFoundException(String.Format("{0} Not Found.", FileName)) End If Dim WB As Workbook If GetFileEncoding(FileName) Is Encoding.UTF8 Then WB = FormatProvider.Import(GetUTF8(FileName)) Else Using Data As FileStream = New FileStream(FileName, FileMode.Open) WB = FormatProvider.Import(Data) End Using End If Return WB End Function Function GetUTF8(Filename As String) As String Dim encodedBytes() As Byte = File.ReadAllBytes(Filename) Dim enc8 As Encoding = New UTF8Encoding(False, True) Dim decodedString As String = String.Empty Try decodedString += enc8.GetString(encodedBytes, 0, encodedBytes.Length) Catch e As DecoderFallbackException Dim sb As New StringBuilder For Each b As Byte In encodedBytes sb.Append(Microsoft.VisualBasic.ChrW(Convert.ToInt32(b))) Next decodedString = sb.ToString() End Try Return decodedString End Function Public Shared Function GetFileEncoding(srcFile As String) As Encoding ' Use Default of Encoding.Default (Ansi CodePage) Dim enc As Encoding = Encoding.UTF8 ' Detect byte order mark if any - otherwise assume default Dim buffer As Byte() = New Byte(4) {} Dim file As New FileStream(srcFile, FileMode.Open) file.Read(buffer, 0, 5) file.Close() If buffer(0) = &HEF AndAlso buffer(1) = &HBB AndAlso buffer(2) = &HBF Then enc = Encoding.UTF8 ElseIf buffer(0) = &HFF AndAlso buffer(1) = &HFE Then enc = Encoding.Unicode ElseIf (buffer(0) = &HFE AndAlso buffer(1) = &HFF) Then enc = Encoding.BigEndianUnicode ElseIf buffer(0) = 0 AndAlso buffer(1) = 0 AndAlso buffer(2) = &HFE AndAlso buffer(3) = &HFF Then enc = Encoding.Unicode ElseIf buffer(0) = &H2B AndAlso buffer(1) = &H2F AndAlso buffer(2) = &H76 Then enc = Encoding.UTF8 End If Return enc End Functionprivate static Workbook CreateWorkbook(RadGridView grid, IEnumerable<string> skipColumns){ Workbook book = new Workbook(); book.Sheets.Add(SheetType.Worksheet); Worksheet sheet = book.ActiveWorksheet; Color accentBorder = Office2013Palette.Palette.AccentColor; Color transparent = Colors.Transparent; Color black = Colors.Black; Color white = Colors.White; ThemableColor themeBlack = new ThemableColor(Color.FromArgb(0,0,0,0)); ThemableColor themeWhite = new ThemableColor(Color.FromArgb(0, 255, 255, 255)); CellBorder border = new CellBorder(CellBorderStyle.Thin, themeBlack); CellBorder noBorder = new CellBorder(CellBorderStyle.None, themeBlack); CellBorders borders = new CellBorders(border, border, border, border, border, border, noBorder, noBorder); int rowNumber = 0; int colNumber = 0; foreach (var column in grid.Columns) { if (column.Header is string) { string columnHeader = (string)column.Header; if (skipColumns == null || !skipColumns.Contains(columnHeader)) { sheet.Cells[rowNumber, colNumber].SetValue(columnHeader); colNumber++; } } } CellSelection selection = sheet.Cells[0,0,0,colNumber-1]; selection.SetIsBold(true); PatternFill solidPatternFill = new PatternFill(PatternType.Solid, accentBorder, transparent); selection.SetFill(solidPatternFill); selection.SetForeColor(themeWhite); HashSet<int> textColumns = new HashSet<int>(); rowNumber++; foreach (var item in grid.Items) { if (item is DynRecord) { DynRecord record = (DynRecord)item; colNumber = 0; foreach (var column in grid.Columns) { if (column.Header is string) { string columnHeader = (string)column.Header; if (skipColumns == null || !skipColumns.Contains(columnHeader)) { if (column is GridViewDataColumn) { GridViewDataColumn dataColumn = (GridViewDataColumn)column; string propName = dataColumn.DataMemberBinding.Path.Path; object value = record.Value(propName); if (value != null) { if (value is string) { textColumns.Add(colNumber); sheet.Cells[rowNumber, colNumber].SetValue((string)value); } else if (value is DateTime) sheet.Cells[rowNumber, colNumber].SetValue((DateTime)value); else if (value is Decimal) sheet.Cells[rowNumber, colNumber].SetValue(Convert.ToDouble((decimal)value)); else { textColumns.Add(colNumber); sheet.Cells[rowNumber, colNumber].SetValue(value.ToString()); } } } colNumber++; } } } // This part is slow and runs out of memory //Color color = record.GetRecordColor().Color; //if (color != Colors.Black) //{ // selection = sheet.Cells[rowNumber, 0, rowNumber, colNumber - 1]; // selection.SetForeColor(new ThemableColor(color)); //} rowNumber++; } } selection = sheet.Cells[0, 0, rowNumber-1, colNumber - 1]; selection.SetBorders(borders); // Set Text columns formatting to @ to prevent Excel autoformatting foreach (int i in textColumns) { selection = sheet.Cells[1, i, rowNumber - 1, i]; selection.SetFormat(new CellValueFormat("@")); } // AutoFitWidth for (int i = 0; i < colNumber - 1; i++) { ColumnSelection columnSelection = sheet.Columns[i]; columnSelection.AutoFitWidth(); double width = sheet.Columns[i].GetWidth().Value.Value * 1.1; columnSelection.SetWidth(new ColumnWidth(width, false)); } return book;}




