Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Построить график одной из кривых, называемых «Замечательные кривые»

Построить график одной из кривых, называемых «Замечательные кривые».
Для построения графика выбрать метод построения по точкам.
Кривые строятся по параметрическим уравнениям.
Хотелось бы посмотреть решение фигуры Лиссажу или логарифмической спирали.
Помогите, пожалуйста.
Ответ: Я построил график полярной розы. как его можно переделать под кардиоиду, логарифмическую спираль или фигуру Лиссажу???

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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Globalization;
 
namespace WpfApplication1
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        const int countDot = 1000;
        Point[] points = new Point[countDot+1];
        DrawingGroup drawingGroup = new DrawingGroup();
 
        public MainWindow()
        {
            InitializeComponent();
            DataFill();//Заполнение списка данными
            Execute();//Заполнение слоев
            //Отображение на экране
            image.Source = new DrawingImage(drawingGroup);
        }
 
        //Генерация точек графиков
        void DataFill()
        {
 
            for (int i = 0; i < points.Length; i++)
            {
 
                double angle = 2 * Math.PI / countDot * i;
                points[i].X = Math.Sin(87 * angle) * Math.Cos(angle) / 2;
                points[i].Y = Math.Sin(87 * angle) * Math.Sin(angle) / 2;
 
            }
 
        }
        private void BackgroundFun()
        {
            //Создаем объект для описания геометрической фигуры
            GeometryDrawing geometryDrawing = new GeometryDrawing();
            //Описываем и сохраняем геометрию квадрата
            RectangleGeometry rectGeometry = new RectangleGeometry();
            rectGeometry.Rect = new Rect(-1, 0, 2, 1);
            geometryDrawing.Geometry = rectGeometry;
            //Настраиваем перо и кисть
            geometryDrawing.Pen = new Pen(Brushes.Red, 0.005);// Перо рамки
            geometryDrawing.Brush = Brushes.Beige;//Кисть закраски
            //Добавляем готовый слой в контейнер отображения
            drawingGroup.Children.Add(geometryDrawing);
        }
        private void GridFun()
        {
            GeometryGroup geometryGroup = new GeometryGroup();
            for (int i = 1; i < 10; i++)
            {
                LineGeometry line = new LineGeometry(new Point(1.0, i * 0.1),
                 new Point(-0.1, i * 0.1));
                geometryGroup.Children.Add(line);
                LineGeometry line1 = new LineGeometry(new Point(0, i * 0.1),
                 new Point(-1.1, 0.1 * i));
                geometryGroup.Children.Add(line1);
            }
 
            GeometryDrawing geometryDrawing = new GeometryDrawing();
            geometryDrawing.Geometry = geometryGroup;
 
            geometryDrawing.Pen = new Pen(Brushes.Gray, 0.003);
            double[] dashes = { 1, 1, 1, 1, 1 };
            geometryDrawing.Pen.DashStyle = new DashStyle(dashes, -.1);
 
            geometryDrawing.Brush = Brushes.Beige;
 
            drawingGroup.Children.Add(geometryDrawing);
        }
 
        private void PolarFun()
        {
            GeometryGroup geometryGroup = new GeometryGroup();
            for (int i = 0; i < points.Length - 1; i++)
            {
                LineGeometry line = new LineGeometry(new Point(points[i].X, 0.5 - points[i].Y),
                                                     new Point(points[i + 1].X, 0.5 - points[i + 1].Y));
                LineGeometry line1 = new LineGeometry(points[i], points[i + 1]);
                geometryGroup.Children.Add(line);
 
            }
            GeometryDrawing geometryDrawing = new GeometryDrawing();
            geometryDrawing.Geometry = geometryGroup;
 
            geometryDrawing.Pen = new Pen(Brushes.Blue, 0.005);
 
            drawingGroup.Children.Add(geometryDrawing);
        }
        private void MarkerFun()
        {
            GeometryGroup geometryGroup = new GeometryGroup();
            for (int i = 0; i <= 10; i++)
            {
                FormattedText formattedText = new FormattedText(
                    String.Format("{0,7:F}", 1 - i * 0.2),
                    CultureInfo.InvariantCulture,
                    FlowDirection.LeftToRight,
                    new Typeface("Verdana"),
                    0.05,
                    Brushes.Black);
 
                formattedText.SetFontWeight(FontWeights.Bold);
 
                Geometry geometry = formattedText.BuildGeometry(new Point(-1.2, i * 0.1 - 0.03));
                geometryGroup.Children.Add(geometry);
                /*FormattedText formattedText1 = new FormattedText(String.Format("{0,7:F}", 1 - i * 0.2),
                    CultureInfo.InvariantCulture, FlowDirection.LeftToRight, new Typeface("Verdana"), 0.05, Brushes.Black);
                formattedText.SetFontWeight(FontWeights.Bold);
                Geometry geometry1 = formattedText.BuildGeometry(new Point(1.2, -i * 0.1 - 0.03));
                geometryGroup.Children.Add(geometry1);*/
 
            }
            GeometryDrawing geometryDrawing = new GeometryDrawing();
            geometryDrawing.Geometry = geometryGroup;
 
            geometryDrawing.Brush = Brushes.LightGray;
            geometryDrawing.Pen = new Pen(Brushes.Gray, 0.003);
            drawingGroup.Children.Add(geometryDrawing);
 
        }
        void Execute()
        {
            BackgroundFun();
            GridFun();
            PolarFun();
            MarkerFun();
        }
    }
}
Вопрос: как в документ Excel вставить несколько строк одной командой VBA?

то есть вместо

Range.EntireRow.Insert
Range.EntireRow.Insert
...
Range.EntireRow.Insert

выполнить одну команду???

нужно это для копирования в этот вставленный Range, поэтому хорошо бы иметь сылку (объект Range) на первую (левую, верхнюю) ячейку этого вставленного фрагмента
Ответ: я использовал такой способ:

Range(Rows(i + 1), Rows(i + n)).Insert

вставка n-строк после строки i
Вопрос: Большая работа с Excel (передача в него данных, построение графиков, дозапись, создание нового файла Excel)

Всем участниками большой привет. Снова нужна помощь.
Что имеем:
-Имеем форму во вложении. на ней есть 30 нужных нам текстбоксов, начиная с "брутто 1х весов" и далее.
-Имеем время обновления, т.е. то время когда отработал запрос к датчику по таймеру.
-Имеем файл Excel (пример во вложении).
Что нужно:
-Каждый новый день создавать новый файл Excel и называть его текущей датой, т.е. сегодня (24.11.2016)-так и назвать файл, завтра новый файл с именем 25.11.2016.
-В этот файл будут записываться показания с определенным интервалом (~30 минут) показания с текстбоксов (пример заполнения excel файла во вложении) т.е. каждые 30 мин новые данные должны записываться в файл ниже и ниже и ниже и т.д.. При изменении даты записываются в новый файл с текущей датой.
-На основании записанных данных в Excel'е построить график по столбцу "Вес на датчике (кг)" исключая сумму ячеек.
Всё должно работать в автомате...
На данный момент имею только запись в файл, и то он перезаписывается, не пойму что не так... Не особо работал со связью данных с Excel.
Help me pls!

То что есть:
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
application = new Application { DisplayAlerts = false };
            const string template = "template.xlsx";
            workBook = application.Workbooks.Open(Path.Combine(Environment.CurrentDirectory, template));
            worksheet = workBook.ActiveSheet as Worksheet;
 
 
            //------------------------------------------------------------------------------------------------------------------------
            worksheet.Range["A2:C2"].Merge(false);
            (worksheet.Cells as Excel.Range).HorizontalAlignment = Excell.XlHAlign.xlHAlignCenter;
            (worksheet.Cells as Excel.Range).VerticalAlignment = Excell.XlVAlign.xlVAlignCenter;
            //------------------------------------------------------------------------------------------------------------------------
            worksheet.Range["A2"].Value = toolStripStatusLabel1.Text;
            worksheet.Range["A3"].Value = "Номер датчика";
            int n = 3;
            for (int i = 1; i < 13; i++)
            {
                worksheet.Range["A" + (n + i)].Value = Convert.ToString(i);
                if (i == 12)
                {
                    worksheet.Range["A16"].Value = "Сумма ячеек:";
                    worksheet.Range["A18"].Value = "Брутто 1-х весов:";
                    worksheet.Range["A19"].Value = "Брутто 2-х весов:";
                    worksheet.Range["A20"].Value = "Сумма брутто:";
                    worksheet.Range["A21"].Value = "Коэффициент:";
                }
            }
            //------------------------------------------------------------------------------------------------------------------------
            worksheet.Range["B3"].Value = "Значения ячеек";
            int zn_ya = 4;
            System.Windows.Forms.TextBox[] tbs = { textBox8, textBox9, textBox10, textBox11, textBox12, textBox13, textBox14, textBox15, textBox16, textBox17, textBox18, textBox19 };
            for (int i = 0; i < 12; i++)
            {
                worksheet.Range["B" + (zn_ya + i)].Value = tbs[i].Text;
                if (i == 11)
                {
                    worksheet.Range["B16"].Value = textBox20.Text;
                    worksheet.Range["B18"].Value = textBox4.Text;
                    worksheet.Range["B19"].Value = textBox5.Text;
                    worksheet.Range["B20"].Value = textBox6.Text;
                    worksheet.Range["B21"].Value = textBox7.Text;
                }
            }
            //------------------------------------------------------------------------------------------------------------------------
            worksheet.Range["C3"].Value = "Вес на датчике (кг)";
            int ves = 4;
            System.Windows.Forms.TextBox[] tbs2 = { textBox21, textBox22, textBox23, textBox24, textBox25, textBox26, textBox27, textBox28, textBox29, textBox30, textBox31, textBox32 };
            for (int i = 0; i < 12; i++)
            {
                worksheet.Range["C" + (ves + i)].Value = tbs2[i].Text;
                if (i == 11) worksheet.Range["C16"].Value = textBox33.Text;
            }
            //------------------------------------------------------------------------------------------------------------------------
            worksheet.Range["A2:C2"].EntireColumn.AutoFit();
            string savedFileName = "template.xlsx";
            workBook.SaveAs(Path.Combine(Environment.CurrentDirectory, savedFileName));
            CloseExcel();
        }
 
        private void CloseExcel()
        {
            if (application != null)
            {
                int excelProcessId = -1;
                GetWindowThreadProcessId(application.Hwnd, ref excelProcessId);
                Marshal.ReleaseComObject(worksheet);
                workBook.Close();
                Marshal.ReleaseComObject(workBook);
                application.Quit();
                Marshal.ReleaseComObject(application);
                application = null;
                try
                {
                    Process process = Process.GetProcessById(excelProcessId);
                    process.Kill();
                }
                finally { }
            }
        }
        [DllImport("user32.dll", SetLastError = true)]
        static extern uint GetWindowThreadProcessId(int hWnd, ref int lpdwProcessId);
Ответ: FreedlN, тебе нужен не обычный файл xlsx, а шаблон xltx. Как во вложении. На его основе создавать новый файл, копировать шаблон данных, вставлять его ниже, заполнять новыми данными, копировать диаграмму, смещать её вниз, менять у неё источник данных.
Для приложенного шаблона я попробовал реализовать экспорт:
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
116
117
118
119
120
121
122
123
using System;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
 
namespace OutputToExcel
{
    public static class ExcelHelper
    {
        [DllImport("user32.dll", SetLastError = true)]
        private static extern uint GetWindowThreadProcessId(int hWnd, ref int lpdwProcessId);
        /// <summary> Имя файла шаблона</summary>
        public static string TemplateFile { get; set; }
        /// <summary> Дата последнего сохранения </summary>
        private static DateTime _lastDate;
        /// <summary> Последнее имя файла </summary>
        private static string _lastFileName;
        /// <summary> Индекс последней строки </summary>
        private static long _lastRowIndex;
 
        private static dynamic _xlApp;
        private static dynamic _xlWorkbook;
        private static dynamic _xlWorksheet;
 
        /// <summary>
        /// Экспорт данных в Excel
        /// </summary>
        /// <param name="cellValues">Значения ячеек</param>
        /// <param name="weightOnSensors">Вес на датчиках</param>
        /// <param name="brutto1">Брутто 1-х весов</param>
        /// <param name="brutto2">Брутто 2-х весов</param>
        /// <param name="koef">Коэффициент</param>
        public static void Export(double[] cellValues, double[] weightOnSensors, double brutto1, double brutto2, double koef)
        {
            _xlApp = Activator.CreateInstance(Type.GetTypeFromProgID("Excel.Application"));
            _xlApp.Visible = true;
            //Если даты не совпадают
            if (!DateTime.Now.Date.Equals(_lastDate.Date))
            {
                //Создаётся новый файл на основе шаблона
                _xlWorkbook = _xlApp.Workbooks.Add(TemplateFile);
                _lastDate = DateTime.Now;//меняется последняя дата
                _lastRowIndex = 21;//Сбрасывается указатель на последнюю строку
                //Формируется новое имя файла
                _lastFileName = string.Format("{0}.xlsx", _lastDate.ToString("dd.MM.yyyy"));
                //Файл сохраняется
                _xlWorkbook.SaveAs(Path.Combine(Environment.CurrentDirectory, _lastFileName));
                _xlWorksheet = _xlWorkbook.ActiveSheet;
            }
            else
            {
                //Открывается файл с соответствующим именем
                _xlWorkbook = _xlApp.Workbooks.Open(Path.Combine(Environment.CurrentDirectory, _lastFileName));
                _lastDate = DateTime.Now;
                _xlWorksheet = _xlWorkbook.ActiveSheet;
                CopyRange();
            }
            //Значения ячеек
            for (var i = 0; i < cellValues.Length; i++)
                _xlWorksheet.Range[string.Format("B{0}", i + _lastRowIndex - 17)].Value = cellValues[i];
            //Вес на датчике
            for (var i = 0; i < weightOnSensors.Length; i++)
                _xlWorksheet.Range[string.Format("C{0}", i + _lastRowIndex - 17)].Value = weightOnSensors[i];
            //Заголовок
            _xlWorksheet.Range[string.Format("A{0}", _lastRowIndex - 19)].Value = string.Format("Время обновления {0:dd.MM.yyyy HH:mm:ss}", _lastDate);
            //Брутто 1-х весов
            _xlWorksheet.Range[string.Format("B{0}", _lastRowIndex - 3)].Value = brutto1;
            //Брутто 2-х весов
            _xlWorksheet.Range[string.Format("B{0}", _lastRowIndex - 2)].Value = brutto2;
            //Коэффициент
            _xlWorksheet.Range[string.Format("B{0}", _lastRowIndex)].Value = koef;
 
            _xlWorkbook.Save();
 
            CloseExcel(_xlApp, _xlWorkbook, _xlWorksheet);
        }
 
        /// <summary>
        /// Копирование диапазона ячеек и диаграммы
        /// </summary>
        private static void CopyRange()
        {
            //Новый диапазон ячеек под заполнененными строками. На 2 строки дальше последней заполненной
            dynamic newRange = _xlWorksheet.Range[string.Format("A{0}", _lastRowIndex + 2)];
            //Копируем данные в новый диапазон ячеек
            _xlWorksheet.Range[string.Format("A{0}:C{1}", _lastRowIndex - 19, _lastRowIndex)].Copy(newRange);
            //Последняя диаграмма на листе. Создаём её дубликат
            dynamic chart = _xlWorksheet.ChartObjects[_xlWorksheet.ChartObjects.Count].Duplicate();
            //Меняем указатель на последнюю строку
            _lastRowIndex += 21;
            //Левая и верхняя координаты для позиционирования новой диаграммы
            double left = _xlWorksheet.Range[string.Format("E{0}", _lastRowIndex - 17)].Left;
            double top = _xlWorksheet.Range[string.Format("A{0}", _lastRowIndex - 17)].Top;
            //Перемещаем диаграмму
            chart.Left = left; chart.Top = top;
            //Меняем диапазон, отображаемый на диаграмме
            chart.Chart.SetSourceData(Source: _xlWorksheet.Range[string.Format("C{0}:C{1}", _lastRowIndex - 17, _lastRowIndex - 6)]);
        }
 
        /// <summary>
        /// Освобождение ресурсов
        /// </summary>
        /// <param name="xlApp">Ссылка на приложение</param>
        /// <param name="xlWorkbook">Ссылка на книгу</param>
        /// <param name="xlWorksheet">Ссылка на лист</param>
        private static void CloseExcel(dynamic xlApp, dynamic xlWorkbook, dynamic xlWorksheet)
        {
            if (xlApp == null) return;
            int excelProcessId = -1;
            GetWindowThreadProcessId(xlApp.Hwnd, ref excelProcessId);
            Marshal.ReleaseComObject(xlWorksheet);
            Marshal.ReleaseComObject(xlWorkbook);
            Marshal.ReleaseComObject(xlApp);
            xlApp = null;
            try
            {
                Process process = Process.GetProcessById(excelProcessId);
                process.Kill();
            }
            catch { }
        }
    }
}
Экспорт выполняется вызовом метода Export с соответствующими параметрами. Осталось только допилить сохранение даты, имени файла и индекса последней строки между запусками программы в течение одного дня. Способов для этого предостаточно
Вопрос: Excel поиск и сравнение таблиц и запись

Добрый день уважаемые форумчани!
В общем есть два экселовских файла в одном 30тыс записей в другом еще больше, нужно с первой таблицы сделать поиск во втором таблице и записать данные во вторую таблицу. положил код. код работает. только одна больная проблема, прога очень медленно обрабатывает все. как можно ускорить. у кого есть предложения.
procedure TForm1.Button3Click(Sender: TObject);
var i, y :integer;
A, B, N, M:string;
begin
Excel:=CreateOleObject('Excel.Application');
Excel.Workbooks.Add(edit1.Text);
Excel2:=CreateOleObject('Excel.Application');
Excel2.Workbooks.Add(edit2.Text);

for i:=1 to Excel.ActiveSheet.UsedRange.Rows.Count do
      begin
        A:= Excel.Range['B'+inttostr(i)];
             for y:=1 to Excel2.ActiveSheet.UsedRange.Rows.Count do
                  begin
                    B:= Excel2.Range['F'+inttostr(y)];
                   if A=B then
                       begin
                         N:= Excel.Range['A'+inttostr(i)];
                         Excel2.Range['A'+inttostr(Y)]:=N;
                   end;

              end;

      end;
Excel2.Visible:=True;
Excel.ActiveWorkbook.Close;
Excel.Application.Quit;
Excel2.ActiveWorkbook.Close;
Excel2.Application.Quit;
end;


заранее спасибо!
Ответ:
kilogramoff
Добрый день. У меня была подобная проблема, и решил я ее так. Сначала копировал все в одну книгу Excel, сохранял. Потом делал подключение через ADO к Excel'ю, а дальше одним перекрестным SQL-запросом вытаскивал нужные строки, и очень быстро все это работает.


'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=' + tmpCrossExcel + ';Extended Properties="Excel 8.0;HDR=NO"' - строка подключения
и что-то типа такого запроса:
'SELECT [cc].*
FROM [CrossCur$] AS [cc]
LEFT JOIN [CrossPrev$] AS [cp] ON
(([cp].[f2] = [cc].[f2]) AND ([cp].[f3] = [cc].[f3]) AND ([cp].[f4] = [cc].[f4]))
WHERE ([cp].[f1] IS NULL)
ORDER BY [cc].[f2], [cc].[f3], [cc].[f4];'
Вопрос: Поиск на листе Excel

Здравствуйте форумчане. В програмировании делаю только первые шаги, подскажите пожалуйста как сделать..
Есть база данных в Excel (три таблицы по одной на каждом листе). Есть форма с 12-ю TexBox. Как сделать, вводишь Фамилию в один из TexBox нажимаешь кнопку (Найти) и и программа ищет по всей книге, находит данного человека и выводит информацию по нему в другие TexBox на форме.
А так же что б можно было при нажатии на другую кнопку (Добавить) создавалась новая строчка в Excel и туда заносились данные с формы.
Пока сделал формы,при загрузке открывается нужная книга Excel, а как дальше не знаю
Ответ:
Сообщение от roket
Есть форма с 12-ю TexBox.
Может быть лучше использовать DataGridView?
Сообщение от roket
вводишь Фамилию в один из TexBox
Если фамилии точно есть в базе данных, и нужно просто извлечь информацию, то может быть лучше использовать ComboBox, данные в который будут загружаться при открытии формы?
Сообщение от roket
Как сделать
Если количество записей достаточно большое, то лучше всего создать многомерный массив, в который вывести информацию из книги, а потом в цикле перебрать элементы массива, поставив условие вывода информации на форму, когда значение соответствующего элемента массива будет равно значению, введенному в текстбокс.
Сообщение от roket
создавалась новая строчка в Excel
Насколько я знаю, в Excel все строчки уже созданы . Если вы имеете ввиду, что нужно добавить запись, то, если вы сделаете то, что написано выше, то перед тем, как загружать массив, вы программно определите номер последней строки на каждом листе, и соответственно, не составит никакого труда занести данные в следующую строку.
В ссылке, которую я вам дал в другой теме есть и занесение данных в ячейку и вывод данных из нее. Осталось через Гугл найти как работать с массивами и циклами.
Вопрос: Сравнение строк в двух Excel-файлах

Доброго дня. Есть два файла Excel. Как сравнить строку одного файла со строкой другого файла и в зависимости от результата сравнения предпринять те или иные действия? Понятно, что if и циклом. Трудности с лексикой Excel.
Спасибо.
Ответ:
Сообщение от Sergey_03
Нифига не догнать, как это прикрутить к этому -
Сообщение от volvo
Вот так 200 строк из xls-файла читаются меньше, чем за секунду:
можно полный вариант - я не понимаю. Гуглю-ищу - каша...
И сравнивать достаточно значения во вторых и четвертых ячейках....

Добавлено через 55 минут
И еще вопрос - мне нужно лист 4 использовать.
Пробую подставить в
Код C++
1
2
3
4
5
6
7
Variant mExcel = CreateOleObject("Excel.Application"); // Запускаем экземпляр Excel
    mExcel.OlePropertyGet("WorkBooks").OleProcedure("Open", WideString(Edit8->Text));
 
    Variant mSheet = mExcel.OlePropertyGet("Workbooks").OlePropertyGet("Item", 1).
                            OlePropertyGet("Worksheets").OlePropertyGet("Item", 4); 
        String s = Clipboard()->AsText; // пишешь это в контейнер для последующего сравнения
    }
- ошибка эксель
Вопрос: Excel и график Dashboard

Может быть, кто сталкивался с этим или на мысль натолкнет, надо построить график в Excel который назвали «дашбоардом» (мб это не правильное название) выглядит он как на рисунке с права, 100% сходство не обязательно, надо что б было похоже
Ответ: Народ привет!
Может быть вы мне подскажите...
Я сделал нормальный KPI Dashboard... Остался один момент
Есть возможность привязать к нему фильтры сортировки. Что бы была одна таблица в которой можно было бы по примеру сводной таблица выбирать определенные данные
Вопрос: Excel 2010 vba Проблема с позиционированием графика

Задачка довольно простая, но решить ее не получается.
Есть ряд листов-графиков, у которых отлавливается событие
Chart_Activate.

Пользователь уходя с листа мог изменить масштаб и покрутить скроллинг, хочется возвращаясь обратно на лист:

1) прокрутить скролл в 0;0, но поскольку лист имеет только график без ячеек
не работает
ActiveWindow.ScrollRow = 1
и почему-то не работает, вообще оно хоть у кого-нибудь работает?
ActiveWindow.ScrollIntoView Left:=0, Top:=0, Width:=100, Height:=100

2) и масштабировать график под размер окошка (в 2007 excel работал код, в 2010 только для чтения доступны свойства)
With Me.ChartArea
.Top = 0
.Left = 0
.Height = ActiveWindow.UsableHeight
.Width = ActiveWindow.UsableWidth
End With

У кого есть опыт/умные мысли в тему/советы поделитесь как решить проблемку
Ответ: The_Prist, да только пропорции экрана графиком не соблюдаются, ну и бы писал так:

Private Sub Chart_Activate()
    Dim minZoom As Long
    Dim addZoom As Long
    minZoom = ActiveWindow.UsableHeight * 100 / ChartArea.Height
    addZoom = ActiveWindow.UsableWidth * 100 / ChartArea.Width
    If (addZoom < minZoom) Then
        minZoom = addZoom
    End If
    ActiveWindow.Zoom = minZoom
End Sub
Вопрос: Цвет линии в графике Excel

Здравствуйте уважаемые форумчане.
Создаю графики в Excel через C# используя Microsoft.Office.Interop.Excel всё работает нормально. но ни как не могу найти как поменять цвет линии в графике Excel.XlChartType.xlLine
Ответ: FanRammstein,

в Excel включаешь запись макроса, меняешь руками цвет линии, выключаешь запись макроса, смотришь, что там нагенерировалось, делаешь то же самое в коде
Вопрос: Автоматическое составления графика смен в Excel

Добрый день.

Есть следующая задача: необходимо автоматизировано составить график смен для 6 сотрудников на месяц.

По следующим условиям:
1. В сутках три смены Д - дневная, В - вечерняя, Н - ночная.
2. Для сотрудников лучший вариант Д+В+Н, т.е. три смены подряд в сутках. Возможны варианты Д, В, Н, Д+В, В+Н, т.е. 1, 2 или 3 смены подряд. Если есть ночная смена, то следующие сутки выходные. Сотрудники хотят работать по 3, 2, 1 смене в порядке их приоритета, чтобы больше было выходных дней.
3. На смене одновременно должно находится определенное количество сотрудников. Обычно 2 или 1 (например, ночная смена). В будущем, возможно, будет 3 сотрудника. Этот параметр может корректироваться, например, при необходимость ставим на дату 3 сотрудника в смену.
4. Для сотрудников заданы минимальное и максимальное количество смен, которое они хотят отработать в месяц. Т.е. фактическое количество смен должно быть из этого интервала. Обычно около 30 смен в месяц.
5. Можно помечать выходные дни для выбранного сотрудника, на которые не будут ставится смены.
6. Нужно как-то "размазать" смены по календарному месяцу, чтобы была равномерная нагрузка на сотрудника.

Всем пофигу на нормы рабочего времени, но после ночной смены нужны сутки отдыха.

Решал с помощью "поиск решения" задачу типа транспортной в Excel методом потенциалов. Чувствую тут как-то аналогично нужно делать, но опыта не хватает.
Помогите. Как это сделать?
Возможно, у кого-то есть похожие примеры или ссылки на софт, который может это сделать.
Можно писать мне на почту Youra_Polishuk@bk.ru

Искали что-то похожее, но оно либо очень сильно наворочено и дорого стоит либо совсем не то.
Пример файла Excel прилагаю.

Заранее спасибо.

К сообщению приложен файл (Plan.xlsx - 18Kb)
Ответ: 982183,
Я бы сюда не писал, если бы в этом не было необходимости.
Тот кто составляет делает себе первым график, а остальные получают график все хуже и хуже!!!

Когда Вам после суток к 17:00 на работу в следующий день потому что так получилось не очень радует сотрудников!

Давайте по теме!