Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > DataGridView to Excel (кодировка...)


Автор: Chaki 5.8.2008, 13:12
Люди, помогите, такая проблема. Когда у меня данные отображены в DataGrid в Windows Form, то данные на русском языке отборажаются верно. Когда я копирую эти данные в Excel, долго думает и потом все цифры остаются в порядке, вот русские буквы превращщяются типа в cO???????/TD>
 или ?. 23 Oђ, ?0, ?24. Вероятно проблема с кодировкой. Где и как можно ее настроить, чтобы данные отображались корректно?
Еще добавлю, что у меня получилось реализовать экспорт данных в Exel (жмешь кнопку, и соханяется в файле .xls или .csv). Картина такая же, только кодировка уже немного по-другому срабатывает, хотя все так же ничего толкового. А вот если взять через Excel: Данные - Импорт - Импортировать сохраненный из С# файл .csv, то так срабатывает.
Вобщем вопрос, как сделать так, чтобы можно было настроить кодрировку (нигде не нашел), или, может, как-то прогнать данные... вобщем бьюсь уже 2 недели, ничего не смог сделать...  smile .  Я использую Visual Studio 2005 и Excel 2007 (Excel 2003 тоже пробовал - не работает)

Автор: MasterOfCode 6.8.2008, 05:48
Идешь в реестр.
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes
Оставляешь все записи в первой колонке где после текста идет ,0 а во второй колонке после текста ,204. Например:
Код

Arial Cyr,0   REG_SZ Arial,204
Arial,0   REG_SZ Arial,204
...
Times New Roman Cyr,0   REG_SZ   Times New Roman,204

Остальные удаляешь.

Восможно поможет.

Автор: Chaki 6.8.2008, 11:48
 smile  Спасибо за совет, но не помогло, все осталось то же самое... блин, даже не думаю что уже и делать....

Автор: Chaki 8.8.2008, 15:30
Ответ есть (кому интересно)! Предложили скопировать в буфер, там перекодировать, и тогда будет ок... Но благо мне часть программы дали, я переделал под себя, и заработало. Вот часть кода:
Код

SqlDataAdapter sdaAdapter = new SqlDataAdapter(cmd);
              DataTable dtDataTable = new DataTable();
              sdaAdapter.Fill(dtDataTable);
              DataGridView dgv1 = new DataGridView();
              dgv1 = dataGridView1;
              dgv1.DataSource = dtDataTable;

// вот далее эта часть и перекодирует данные, и при вставке в Excel все отлично отображается
              dgv1.SelectAll();
              Clipboard.Clear();
              if (dgv1.GetClipboardContent() != null)
              {
                  Clipboard.SetDataObject(dgv1.GetClipboardContent());
                  Clipboard.GetData(DataFormats.Text);
                  IDataObject dt = Clipboard.GetDataObject();
                  if (dt.GetDataPresent(typeof (string)))
                  {
                      string tb = (string) (dt.GetData(typeof (string)));
                      ASCIIEncoding ee = new ASCIIEncoding();
                      Encoding myEncoding = Encoding.GetEncoding(1251);
                      byte[] abyDataStr = new byte[tb.Length];
                      abyDataStr = myEncoding.GetBytes(tb);
                      Clipboard.SetDataObject(myEncoding.GetString(abyDataStr));
                  }

Всем спасибо, может данные знания пригодятся разработчикам клиентов под Sql. Всем удачи и спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)