Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
1 / 1 / 1
Регистрация: 27.05.2014
Сообщений: 76
.NET 4.x

Из Excel object переделать в double

16.08.2017, 14:59. Показов 968. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Office.Interop.Excel;
using System.IO;
using Excel = Microsoft.Office.Interop.Excel;
 
namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        class Point
        {
            public double X { get; set; } //изменен тип
            public double Y { get; set; }
 
 
            public Point()
            {
                X = 0;
                Y = 0;
            }
            public Point(double x, double y)
            {
                X = x;
                Y = y;
            }
 
            public double DistanceTo(Point point) //расстояние до точки point
            {
                return Math.Sqrt(Math.Pow(point.X - X, 2) + Math.Pow(point.Y - Y, 2));
            }
 
        }
 
        class PointList
        {
            Point CenterPoint;
            List<Point> Points;
            public PointList(string centerPointFile, string pointsFile)
            {
                Points = new List<Point>();
                ReadPoints(pointsFile);
                ReadCenterPoint(centerPointFile);
            }
 
            void ReadCenterPoint(string centerPointFile) //получение центральной точки
            {
                if (!File.Exists(centerPointFile)) CenterPoint = new Point();
                else
                {
                    string[] parts = File.ReadAllText(centerPointFile).Split(';');
                    CenterPoint = new Point(double.Parse(parts[0]), double.Parse(parts[1]));
                }
            }
 
            public void ReadPoints(string pointsFile) //заполнение списка точек
            {
 
                string fileName = pointsFile; //имя Excel файла  
                Excel.Application xlApp = new Excel.Application();
                Excel.Workbook xlWb = xlApp.Workbooks.Open(fileName); 
                Excel.Worksheet xlSht = xlWb.Sheets[1]; 
                int iLastRow = xlSht.Cells[xlSht.Rows.Count, "A"].End[Excel.XlDirection.xlUp].Row;  
                int iLastRow2 = xlSht.Cells[xlSht.Rows.Count, "B"].End[Excel.XlDirection.xlUp].Row;
                var arrData = (object[,])xlSht.Range["A2:A" + iLastRow].Value; 
                var arrData2 = (object[,])xlSht.Range["B2:B" + iLastRow].Value;
                Point point = null;
                point.X = xlSht.Range["A2:A" + iLastRow].Value; // выдает ошибку Не удается неявно преобразовать тип "object[*,*]" в "double"
                point.Y = xlSht.Range["B2:B" + iLastRow2].Value;
                Points.Add(point);
                xlWb.Close(true);               
                xlApp.Quit(); 
            }
 
            public void SaveResults(string resultFile) //метод сохраняющий данные и результаты расчета в файл
            {
                using (StreamWriter writer = new StreamWriter(resultFile, true))
                {
                    foreach (Point point in Points)
                        writer.WriteLine(CenterPoint.DistanceTo(point));
                }
            }
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            string[] file_list1 = Directory.GetFiles(@"/source", "d*.xls"); // файлы с центральными точками
            string[] file_list2 = Directory.GetFiles(@"/source", "XY*.xls"); // файлы с наборами точек
            string resFileName = @"rezultat\\resFile.csv";
            if (File.Exists(resFileName)) File.Delete(resFileName); // удаляем старый файл с результатами
            if (file_list1.Length != file_list1.Length || file_list1.Length == 0) // проверяем количество файлов
            {
                MessageBox.Show("Проверьте файлы");
                return;
            }
            for (int i = 0; i < file_list1.Length; i++)
            {
                PointList points = new PointList(file_list1[i], file_list2[i]); // берем пару файлов
                points.SaveResults(resFileName); // считаем расстояния и записываем в файл
            }
        }
    }
}
Всем привет, задача такова, есть два файла, я беру по строчке x,y из другого файла точку (x,y) - 1 одну и туже, рассчитываю по формуле, записываю результат, беру другую точку x,y в этом файле, и так по всем файлам в папке, помогите пожалуйста)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.08.2017, 14:59
Ответы с готовыми решениями:

Как правильно конвертировать из object (который может быть Double) в double
Добрый день, возможно задача тривиальная, но меня как новичка она вводит в какой-то ступор. Делаю во так: protected double...

Преобразовать object[,] в double[,]
Доброго времени суток, какие есть возможные варианты такого преобразование, кроме как полного перебора в циклах.

Преобразовать из типа object[] в double[,]
Всем доброго времени суток. Столкнулся с некоторой проблемой: есть некоторая функция, которая возвращает возвращает значения типа object ....

4
45 / 45 / 32
Регистрация: 01.10.2012
Сообщений: 185
17.08.2017, 14:03
Посмотри, что возвращает эта строка

C#
1
xlSht.Range["A2:A" + iLastRow].Value;
Она тебе возвращает двумерный массив, а ты пытаешься его запихнуть в переменную типа double.
0
999 / 358 / 135
Регистрация: 27.10.2006
Сообщений: 764
17.08.2017, 15:21
stik77, поддерживаю Gekr, раз вы взяли данные с листа в массив arrData и arrData2, то вам в цикле for нужно обращаться к элементам этих массивов, т.е. к arrData[i,1], а вы почему-то в переменную хотите загнать значения диапазона ячеек (xlSht.Range["A2:A" + iLastRow].Value
0
1 / 1 / 1
Регистрация: 27.05.2014
Сообщений: 76
21.08.2017, 11:46  [ТС]
Pavel55, Gekr, запутался, голова кипит, помогите кто нибудь до конечного результата, пожалуйста)
0
999 / 358 / 135
Регистрация: 27.10.2006
Сообщений: 764
21.08.2017, 13:56
вот это надо переделать на цикл, т.к. вам нужно обработать каждое значение из ячейки

point.X = xlSht.Range["A2:A" + iLastRow].Value; // выдает ошибку Не удается неявно преобразовать тип "object[*,*]" в "double"
point.Y = xlSht.Range["B2:B" + iLastRow2].Value;


что-то типа

C#
1
2
3
4
5
6
7
8
for (int i = 1; i = iLastRow; i++)
{
point.X = xlSht.Range["A" + i ].Value; // выдает ошибку Не удается неявно преобразовать тип "object[*,*]" в "double"
point.Y = xlSht.Range["B" + i ].Value;
 
//тут дальше что-то делать с полученными значениями из ячеек Excel
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.08.2017, 13:56
Помогаю со студенческими работами здесь

Double[][] упаковка/распаковка в тип object
У меня в методе возвращается массив данных разного типа, чтобы не возникало конфликтов (данные инициализируются и присваиваются внутри...

Перевод из массива object в массив типа double
как перевести массива object в массив типа double каким нибудь стандартным методом можно

Ошибки error C2296: -: недопустимо, левый операнд имеет тип "double (__cdecl *)(double,double,double
Думаю из-за polp #include&lt;iostream&gt; #include&lt;cmath&gt; #include&lt;cstdlib&gt; using namespace std; double polp(double af,double...

Конвертирование double в int, массив типа object, NullReferenceException
object doc = new object; ------------------------------------------------------------------------------------------ for...

Как привести переменную типа Object к типу Double?
Как привести переменную типа Object к типу Double?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru